Это не о производительности, речь идет о доступе к собственности конкретного экземпляра объекта: -
x.init()
Не будет отображаться «тест», если вы не используете this
в функции.
Эффективно выше линии так же, как: -
x.init.call(x);
первым в В параметре использования call
присваивается this
, когда функция выполняется.
Теперь рассмотрим: -
var fn = x.init; //Note no() so the function itself is assigned to the variable fn
fn();
Теперь вы ничего не получите в боевой готовности. Это потому, что выше эффективно: -
fn.call(window);
В браузере прошла Javascript window
объект является синонимом глобального объекта. Когда функция вызывается «в raw», то this
по умолчанию относится к глобальному объекту.
Классическая ошибка делает что-то вроде этого: -
var x = {
ele: 'test';
init: function(elem) {
elem.onclick = function() { alert(this.ele); }
}
}
x.init(document.getElementById('myButton'));
Однако это не работает, потому что функция прилагается к событию OnClick называется браузером с помощью кода, как: -
onclick.call(theDOMElement)
Следовательно, когда функция работает this
это не то, что вы думаете.
Мое обычное решение этой ситуации: -
var x = {
ele: 'test';
init: function(elem) {
var self = this;
elem.onclick = function() { alert(self.ele); }
elem = null;
}
}
x.init(document.getElementById('myButton'));
Обратите внимание на elem = null
является утечка памяти IE обходным.
Это не только вы - это один из самых запутанных аспектов языка. Вы должны получить хорошие ответы; Я с нетерпением жду их чтения. –