>  기사  >  웹 프론트엔드  >  JScript_javascript 기술에서 'this' 키워드를 사용하는 방법에 대한 보충 자료

JScript_javascript 기술에서 'this' 키워드를 사용하는 방법에 대한 보충 자료

WBOY
WBOY원래의
2016-05-16 19:17:471062검색

"JavaScript에서 이 키워드를 사용하는 방법에 대한 자세한 설명" 기사에서 JavaScript 및 JScript에서 이 키워드를 사용하는 8가지 방법의 예를 제시했습니다. 이 키워드는 당시 언급되지 않았던 2가지 활용법이 있는 것으로 밝혀져 이제 몇 가지 추가 설명을 추가하겠습니다. 그리고 이 키워드의 사용법에 대한 첫 번째 설명을 통해 우리는 객체 기반 언어로서의 JavaScript의 본질을 더 잘 이해할 수 있습니다.

하나는 JavaScript 클래스의 정의와 관련이 있습니다.


function JSClass()
{
}

JSClass.prototype.m_Properties = 100;

JSClass.prototype.ToString = function()
{
경고(this.m_Properties)

ToString 메서드의 This.m_Properties는 100이므로 다음 정의는 어떻습니까?

function JSClass()
{
}

JSClass.m_Properties = -100;

JSClass.ToString()
{
경고 (this.m_Properties);
}

현재 ToString의 this.m_Properties는 무엇입니까? -100입니다. 확실히? 반드시 그런 것은 아니며 ToString 메서드를 호출하는 방법에 따라 다릅니다.

JSClass.ToString();
var fun = JSClass.ToString();
fun()
이때 실제로 실행된 결과는 -100이며 정의되지 않았습니다. 정말 우울해요. 재미있게 달리면 어떻게 -100을 얻을 수 있나요? 다음과 같이 fun에 값을 할당해야 합니다.

var fun = function() { JSClass.ToString() }
fun()
하하, 이것은 -100입니다. 꽤 말도 안 되는 것 같지만, 결국에는 여전히 JSClass.ToString()이라고 불리는 것이 아닌가요? 이에 대해서는 나중에 이야기하겠습니다. 이 두 JSClass가 결합되면 어떤 일이 발생하는지 살펴보겠습니다.


함수 JSClass()
{
}

JSClass.m_Properties = -100;
JSClass.prototype.m_Properties = 100; >JSClass.ToString = function()
{
경보(this.m_Properties);
}

JSClass.prototype.ToString = function()
{
경보( this.m_Properties);
}

이 두 ToString() 메서드와 그 안에 있는 this 키워드 사이의 관계는 무엇입니까? 다음 예를 살펴보십시오.

var jsclass = new JSClass();
jsclass.ToString();
JSClass.ToString()
결과는 100 및 -100입니다. 여기서 jsclass는 실제로 new 키워드 설명을 통해 새 인스턴스를 생성하는 JavaScript 언어 메커니즘입니다. 그리고 JSClass는 무엇입니까? 원래는 객체 인스턴스이지만 함수나 클래스 설명처럼 보입니다. 이에 대한 질문에 대해 첫 번째 jsclass.ToString() 메소드의 this는 새로 생성된 인스턴스를 참조하고, JSClass.ToString() 메소드의 this는 JSClass의 객체 인스턴스를 참조합니다.

이 두 가지의 서로 다른 성격을 이해하면 JavaScript를 객체 기반 언어라고 부르는 이유와 객체 지향 언어의 본질적인 차이점을 더 잘 이해할 수 있습니다.

두 번째 보충에서는 이것을 어떻게 활용하는지, 즉 eval 방식을 사용할 때 이때는 무엇일까요? 살펴보세요:

alert(this === eval("this"))
결과는 무엇인가요? 사실이에요! 이는 eval 내의 코드가 실행되는 범위가 현재 페이지 자체이기 때문입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.