Могу ли я изменить контекст JavaScript "это"? - PullRequest
25 голосов
/ 27 июня 2009
var UI$Contract$ddlForm_change = function() {

    //'this' is currently the drop down that fires the event
    // My question is can I change the context so "this" represents another object? 
    this = SomeObject;

    // then call methods on the new "this"
    this.someMethod(someParam);   
};

возможно ли это?

Ответы [ 3 ]

42 голосов
/ 27 июня 2009

Нет, это невозможно.

Вы можете вызвать метод с указанным значением для this (используя method.apply() / method.call()), но вы не можете переназначить ключевое слово , this.

9 голосов
/ 27 июня 2009

Вы не можете изменить то, к чему относится this из внутри функции.

Однако вы можете вызвать функцию в определенном контексте - так что this ссылается на конкретный объект - используя call или apply.

7 голосов
/ 27 июня 2009

J-P правильно. Это невозможно. См. Документ спецификации языка JavaScript ECMA-262. Вы можете скачать стандарт здесь:

http://www.ecma -international.org / публикации / стандарты / ECMA-262.htm

Файл ECMA-262.pdf и на стр. 39, раздел 10.1.7.

10.1.7 Это

Это значение связано с каждый активный контекст выполнения. это значение зависит от абонента и тип исполняемого кода и является определяется, когда контроль входит в контекст исполнения. Это значение связанный с контекстом выполнения неизменен.

Примечание: «Неизменен». т.е. не может быть изменено.

...