0

現在、関数を使用してオブジェクトに追加しようとしています。

私のコードは次のとおりです。

var ob = {};

function add(f, fun) {
    ob[f] = fun();
}

add('hi', function() {
    alert('hello')
})

ob.hi()​

したがって、これはobを次のように変更すると想定されます。

var ob = {
     hi: function(){
      alert('hello')
     }
}

これはアラートhelloを出しますが、関数からではなく、add関数(停止したい)のトリガーからだけですob.hi()

助けてくれてありがとう。必要に応じて、フィドルを確認することもできます

4

2 に答える 2

2

関数を実行し、その戻り値をプロパティに割り当てています。代わりに、関数への参照をプロパティに割り当てる必要があります。add関数を変更します。

function add(f, fun) {
    ob[f] = fun; //No invoking parentheses!
}

これが更新されたフィドルです。

元のフィドルのコンソールを見ると、何が問題になっているのかがわかります。

Uncaught TypeError:オブジェクトのプロパティ'hi'は#<Object>関数ではありません

于 2012-07-13T08:01:54.123 に答える
1

オブジェクトのプロパティとして関数を追加します。

ob['hi'] = function() {
    alert('hello')
};

また

ob[funname] = fun;

関数が他の場所で定義されている場合。

addプロパティを設定するためだけに関数を記述しないでください。言語の標準機能をカスタムセッターに置き換えても、コードが読みやすくなるわけではありません。

そして、javascriptでクラスを定義できることを忘れないでください:

function Rect(x,y,w,h){
    this.x = x;
    this.y = y;
    this.w = w;
    this.h = h;
}

Rect.prototype.contains = function(x, y) {
    return x>=this.x && x<=this.x+this.w && y>=this.y && y<=this.y+this.h;
};

として作成されたすべてのオブジェクトにnew Rect(0, 1, 2, 3)は、contains関数があります。

于 2012-07-13T08:02:03.900 に答える