使用Object.create()和function.apply的Javascript上下文问题似乎不起作用?

时间:2011-06-02 14:20:27

标签: javascript inheritance apply


在尝试使用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但得到了相同的结果。这有用吗?

1 个答案:

答案 0 :(得分:1)

functionArg是一个字符串,在这种情况下你必须使用括号表示法:

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

或它是一个函数引用,它应该是

functionArg.apply(this)

这取决于此行中func3的内容:this.func1(func3)。目前,func3未定义。

在任何情况下,this.functionArg都是错误的,您在任何地方都没有定义任何属性functionArg