English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
По сравнению с другими языками, поведение ключевого слова this в JavaScript несколько иное.
В JavaScript, ключевое слово this указывает на объект, к которому он относится.
В зависимости от места использования, он имеет различные значения:
В методе, this указываетвладельческий объект
отдельно, this указывает наглобальным объектом
В функции, this указываетглобальным объектом
В функции, в строгом режиме, this являетсяНеопределенным
В событии, this указывает на объект,элемент
Методы, такие как call() и apply(), могут быть привязаны клюбой объект
В методе объекта this указывает на контекст методаuser.
В следующем примере, когда вызываетсяuser.getName()внутри функции this привязывается кuserОбъект:
var user = { firstName: "Vishal", lastName : "Choudhary", age : 22, getName : function() { return this.firstName + " " + this.lastName; } ; document.write(user.getName()); // "Vishal Choudhary"Проверьте, посмотрите‹/›
ЗдесьuserОбъект является владельцемgetNameметода.
В глобальном контексте выполнения (вне функций) this независимо от того, находится ли он в строгом режиме или нет, всегда ссылается на глобальный объект.
// В Web-браузере объект окна также является глобальным объектом: console.log(this === window); // true a = 50; console.log(window.a); // 50 this.b = "w3codebox"; console.log(window.b) // "w3codebox" console.log(b) // "w3codebox"Проверьте, посмотрите‹/›
В браузере глобальным объектом является[object Window].
Внутри функции значение this зависит от способа вызова функции.
Поскольку следующий код не выполняется в строгом режиме, therefore this по умолчанию установлено в глобальный объект, то есть в браузере это[object Window]:
function myFunc() { return this; }Проверьте, посмотрите‹/›
В строгом режиме, однако значение thisundefined:
function myFunc() { "use strict"; return this; }Проверьте, посмотрите‹/›
Таким образом, в строгом режиме, если контекст выполненияНеопределеннымЕсли оно не определено, то оно останетсяНеопределенное состояние.
Когда функция используется в качестве обработчика событий, this устанавливается в элемент, который вызвал событие:
let btn = document.querySelector("button"); btn.onclick = function() { this.style.display = "none"; ;Проверьте, посмотрите‹/›
При вызове кода из обработчика событий inline, this устанавливается в элемент, на котором размещен слушатель:
<button onclick="this.style.display='none'">Нажмите, чтобы удалить меня</button>Проверьте, посмотрите‹/›
Это другой пример:
<button onclick="alert(this)">Нажмите</button>Проверьте, посмотрите‹/›
Методы call() и apply() являются предопределенными методами JavaScript.
Они могут быть использованы для вызова методов объекта с другим объектом в качестве параметра.
function add(c, d) { return this.a + this.b + c + d; } var obj = {a: 5, b: 10}; add.call(obj, 5, 7); // 27 add.apply(obj, [10, 20]); // 45Проверьте, посмотрите‹/›
В функции-стрелке (=>), this всегда указывает на этот момент词法 области, в которой она была создана.
В глобальном коде, он будет установлен в глобальный объект:
var globalObj = this; var myFunc = (() => this); document.write(myFunc() === globalObj); // trueПроверьте, посмотрите‹/›