1


Object.createを使用しようとすると、オブジェクトコンテキストでエラーが発生します。これは非常に単純な例ですが、これが私が行っていることです。

var object1 = {
func1: function(functionArg){
    ...
    functionArg();
}
}

var object2 = {
func2: {
    value: function(){
        this.memberVariable = 1;
        ... 
        this.func1(this.func3)
    }
}

func3: {
    value: function(){
        if(this.memberVariable == 1){};
        ...
    }
}
}

var newObject = Object.create(object1,object2);
newObject.func2();

式'this.memberVariable'[undefined]の結果はオブジェクトではありません。

この問題を思い出すために、applyを使用して関数に正しいコンテキストを与えることができると思いました。そこで、object1を次のようなものに置き換えました。

var object1 = {
func1: function(functionArg){
    var thisObject = this;
    var functionArgApply = function(){
        functionArg.apply(thisObject,arguments);
    };
    ...
    functionArgApply();
}
}

式'functionArg.apply'[undefined]の結果は関数ではないというエラーが表示されます。これは、object2が値表記を使用しているためだと思います。functionArg.value.applyに変更してみましたが、同じ結果になりました。これは機能する必要がありますか?

4

1 に答える 1

1

どちらもfunctionArg文字列です。この場合、角かっこ表記を使用する必要があります。

func1: function(functionArg){
    ...
    this[functionArg]();
}

またはそれは関数参照であり、その場合は

functionArg.apply(this)

これfunc3は、この行の内容によって異なりますthis.func1(func3)。現状では、func3定義されていません。

いずれにせよ、this.functionArg間違っていますfunctionArg。どこにもプロパティが定義されていません。

于 2011-06-02T14:30:58.150 に答える