Посмотрите на этот фрагмент:Javascript: obj.fn() против х = obj.fn; х()
var obj = {
fn: function() {return this;}
};
var x = obj.fn;
obj.fn(); // returns obj
x(); // returns window (in the browser)
Мне интересно, почему obj.fn()
отличается от x=obj.fn; x()
. Есть ли специальный случай для поиска атрибутов, за которым следует вызов функции в пределах одного выражения - или происходит какое-то более сложное волшебство под капотом (например, с descriptor protocol в Python)?
Соответствующий раздел спецификации ES5: http://ecma262-5.com/ELS5_HTML.htm#Section_11.2.3 –
@Tim Down: Спасибо, я сам этого не нашел. К сожалению, читаемость этой спецификации имеет ... ekhm .. сомнительное качество :) Во всяком случае, это позор, что состав поиска свойств и оператора вызова дает разные результаты, чем использование их отдельно. –