Проблема контекста Javascript с использованием Object.create () и function.apply не работает? - PullRequest
1 голос
/ 02 июня 2011


Я сталкиваюсь с ошибкой в ​​контексте объекта при попытке использовать 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 Ответ

1 голос
/ 02 июня 2011

Либо functionArg - это строка, в этом случае вы должны использовать скобочное обозначение:

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

, или это ссылка на функцию, в этом случае она должна быть

functionArg.apply(this)

Это зависит от того, что func3 находится в этой строке: this.func1(func3).func3 не определено.

В любом случае, this.functionArg неверно, у вас нет свойства functionArg, определенного где-либо.

...