Когда вы используете ключевое слово function
, оно определяет свое собственное this
, которое переопределяет внешний this
, который вы предполагали использовать:
this.placeholder = 'Foo';
$(document).ready(function () {
console.log('READY', this.placeholder); // this is another this, local to the function
}
Существует два решения:
Со старым JS
В чистом JS вы можете просто убрать свой внешний this
, чтобы использовать его внутри:
this.placeholder = 'Foo';
var that = this;
$(document).ready(function () {
console.log('READY', that.placeholder); // that refers to the outer this
}
С современным JS (скрипт ECMA> 5)
Если вы можете использовать современный браузер со скриптом ECMA> 5, вы можете использовать функцию стрелки ()=>{}
вместо function(){}
, которая автоматически сохраняет внешний вид this:
this.placeholder = 'Foo';
$(document).ready(() => {
console.log('READY', this.placeholder); // () => {} does not override this
}