2011-03-01 6 views
6

`이 '가 말하는 것은 무엇입니까?

나는 자바 스크립트 클래스를 가지고있다.

function Person(n){ 
    // ... 
} 

클래스 외부에 다음 코드가있다 :

Person.prototype.shower = function(){ this.dirtFactor=2 } 

위의 코드에서 this은 무엇을 참조합니까? 그것은 prototype 또는 Person 클래스를 참조합니까?

답변

1

좋아, 기본은 첫째 : 당신이 function Person(o) { ... }을 쓸 때, 당신은 클래스를 선언 하지입니다 - 자바 스크립트 클래스를 기반으로하지만을 객체를 기반으로하지 않습니다. 이 문장은 단순히 함수를 선언합니다 (우연히도 객체입니다).

다음으로,이 같은 객체 생성 : 당신이 생성자 (종류의) 객체를 생성하는

var mellon = new Person('Mellon'); 

Person입니다.

지금,주의 깊게 읽기 : 의 생성자 Person입니다 Person의 모든 방법 '이후의 prototype는 개체에 사용할 수 있습니다.

당신은 쓰기 그래서 경우 :

Person.prototype.shower = function(){ this.dirtFactor=2 } 

다음 방법 mellon.shower()가 사용할 수 있습니다.

이 주제에 대한 자세한 내용은 Mozilla's intro to OOP in Javascript을 참조하십시오.


그래서 귀하의 질문에 대답하기 : this는 방법 shower가 호출되는 객체를 말합니다. 위의 경우에는 이됩니다.

1

그래서 사람의 인스턴스를 참조 필드가

에 할당되었습니다.
1

그것은 당신이 전화 기능, 당신이 그것을 정의하지 어떻게 방법에 this의 의미는 따라 Person 클래스

 
    var instance = new Person(...); 

    instance.shower(); // Here will be this.dirtFactor assigned to instance.dirtFactor 
4

의 인스턴스에 reffers.

당신이 그런 짓을 가정 :

var bob = new Person('whatever n is'); 
bob.shower(); 

다음 this이 될 것입니다 bob (Person의 인스턴스가 될 것이다).

+0

+1하지만 분명히 알 수 있듯이 'this'는 호출 될 때'.' 앞에 있었던 것이 무엇이든 의미합니다. '.'없이 호출되면'this'는'window' /'global'을 기본값으로 사용합니다. –

+1

샤워 기능을'function() {console.log (this); }'. – kim3er

+0

@ Box9'this'는 현재 컨텍스트를 참조합니다. 'this'는 기본적으로 브라우저의'window' 객체를 참조합니다. 인클로저/기능을 추가하면 컨텍스트가 변경됩니다. – kim3er

1

shower이 호출 된 개체를 나타냅니다. 특히, 결국 이것은 Person 기능을 실행하고 생성자에서 this으로 액세스 할 수 있습니다 비어있는 새 개체를 만드는 것입니다

p = new Person(n); 

하고 종료됩니다. 그러면 해당 객체에는 Person.prototype에 대한 링크가 제공되고 p에서 실패하는 모든 속성 참조는 Person.prototype에 표시되어 해당 속성이 있는지 확인합니다. p.shower()를 사용하여이 p에라고하면

, 다음 thisp로 돌아갑니다. 자바 스크립트에는 인스턴스와 클래스가 없다는 것이 핵심입니다. Person.prototype은 하나의 개체이며 Person에 의해 생성 된 모든 개체는이 개체에 대한 참조를 공유합니다.

제거 프로토 타입은 모두 함께, 당신은 단지

person = {'shower': function() { 
    this.dirtFactor = 2; } 
} 

person.shower(); 
console.log(person.dirtFactor); 

을 할 수 있으며 this는 여전히 메소드를 호출하는시 객체를 참조 것을 볼 수 있습니다.

관련 문제