2009-06-26 3 views
24
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); 
}; 

это возможно? Спасибо, ~ ck в Сан-ДиегоМогу ли я изменить контекст javascript «this»?

+0

См. Ответ на этот вопрос: http://stackoverflow.com/questions/456967/javascript-how-to-set-this-variable-easily – molf

+2

yepp, более или менее дубликат http: // stackoverflow. com/questions/456967/javascript-how-to-set-this-variable-легко Допустимым ответом было использование функции call()/apply(), см. https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply – VolkerK

+0

Это просто смущает. Все ответы говорят «нет», вы не можете этого сделать. По-видимому, ответы на дублированный вопрос да, вы можете это сделать. Идите фигуру. – DOK

ответ

39

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

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

+0

Дополнительная информация на [joshuakehn.com] (http://joshuakehn.com/2011/10/20/Understanding-JavaScript-Context.html) – vdubus

+0

Вы также можете передать 'this' в качестве аргумента функции в вызове 'UI $ Contract $ ddlForm_change', то вы можете использовать этот аргумент как контекст/доступ к его свойствам –

7

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

http://www.ecma-international.org/publications/standards/Ecma-262.htm

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

10.1.7 Этот

Существует В это значение, связанное с каждого активного контекста исполнения. Значение это значение зависит от вызывающего и от типа выполняемого кода и является , определяемым, когда управление входит в контекст выполнения . Это значение , связанное с контекстом выполнения , является неизменным.

Примечание: «является неизменным». т.е. не может быть изменено.

9

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

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

Смежные вопросы