使用Object.create()和function.apply'似乎不起作用

Javascript context issue using Object.create() and function.apply doesn't seem to work?

本文关键字:不起作用 apply function create Object 使用      更新时间:2023-09-26


我在尝试使用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"[未定义]的Result不是对象。

为了记住这个问题,我想我可以使用application为函数提供正确的上下文。所以我用替换了object1

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

现在我得到一个错误,说表达式"functionArg.apply"[未定义]的结果不是函数。我认为这是因为object2使用了值表示法。我尝试将其更改为functionArg.value.apply,但得到了相同的结果。这样行吗?

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

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

或者它是一个函数引用,在这种情况下它应该是

functionArg.apply(this)

这取决于func3在这一行中是什么:this.func1(func3)。目前,func3尚未定义。

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