English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
기타 언어와 비교해 JavaScript에서 this 키워드의 동작은 약간 다릅니다.
JavaScript에서, 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值取决于函数的调用方式。
由于以下代码不在严格模式下,this因此默认为全局对象,即浏览器中的[object Window]:
function myFunc() { return this; };테스트를 보세요‹/›
在严格模式,然而this的值是undefined:
function myFunc() { "use strict"; return this; };테스트를 보세요‹/›
因此,在严格模式下,如果执行上下文未定义它,则它将保持未定义状态。
当一个函数用作事件处理程序时,this将被设置为触发事件的元素:
let btn = document.querySelector("button"); btn.onclick = function() { this.style.display = "none"; });테스트를 보세요‹/›
인라인 이벤트 처리기에서 코드를 호출할 때, 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는 항상 그것이 생성된 시점의 문법적 범위의 this를 가리킵니다.
전역 코드에서는, 그것이 전역 객체로 설정됩니다:
var globalObj = this; var myFunc = (() => this); document.write(myFunc() === globalObj); // true테스트를 보세요‹/›