English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JavaScript 기본 강의

JavaScript 객체

JavaScript 함수

JS HTML DOM

JS 브라우저 BOM

AJAX 기본 강의

JavaScript 참조 매뉴얼

JavaScript this 키워드

기타 언어와 비교해 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在DOM事件处理程序中

当一个函数用作事件处理程序时,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
테스트를 보세요‹/›