function Person(n){
// ...
}
클래스 외부에 다음 코드가있다 :
Person.prototype.shower = function(){ this.dirtFactor=2 }
위의 코드에서 this
은 무엇을 참조합니까? 그것은 prototype
또는 Person
클래스를 참조합니까?
function Person(n){
// ...
}
클래스 외부에 다음 코드가있다 :
Person.prototype.shower = function(){ this.dirtFactor=2 }
위의 코드에서 this
은 무엇을 참조합니까? 그것은 prototype
또는 Person
클래스를 참조합니까?
좋아, 기본은 첫째 : 당신이 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
가 호출되는 객체를 말합니다. 위의 경우에는 이됩니다.
이
그래서 사람의 인스턴스를 참조 필드가
에 할당되었습니다.그것은 당신이 전화 기능, 당신이 그것을 정의하지 어떻게 방법에 this
의 의미는 따라 Person 클래스
var instance = new Person(...); instance.shower(); // Here will be this.dirtFactor assigned to instance.dirtFactor
의 인스턴스에 reffers.
당신이 그런 짓을 가정 :
var bob = new Person('whatever n is');
bob.shower();
다음 this
이 될 것입니다 bob
(Person
의 인스턴스가 될 것이다).
shower
이 호출 된 개체를 나타냅니다. 특히, 결국 이것은 Person
기능을 실행하고 생성자에서 this
으로 액세스 할 수 있습니다 비어있는 새 개체를 만드는 것입니다
p = new Person(n);
하고 종료됩니다. 그러면 해당 객체에는 Person.prototype
에 대한 링크가 제공되고 p
에서 실패하는 모든 속성 참조는 Person.prototype
에 표시되어 해당 속성이 있는지 확인합니다. p.shower()
를 사용하여이 p
에라고하면
this
는
p
로 돌아갑니다. 자바 스크립트에는 인스턴스와 클래스가 없다는 것이 핵심입니다.
Person.prototype
은 하나의 개체이며
Person
에 의해 생성 된 모든 개체는이 개체에 대한 참조를 공유합니다.
제거 프로토 타입은 모두 함께, 당신은 단지
person = {'shower': function() {
this.dirtFactor = 2; }
}
person.shower();
console.log(person.dirtFactor);
을 할 수 있으며
this
는 여전히 메소드를 호출하는시 객체를 참조 것을 볼 수 있습니다.
+1하지만 분명히 알 수 있듯이 'this'는 호출 될 때'.' 앞에 있었던 것이 무엇이든 의미합니다. '.'없이 호출되면'this'는'window' /'global'을 기본값으로 사용합니다. –
샤워 기능을'function() {console.log (this); }'. – kim3er
@ Box9'this'는 현재 컨텍스트를 참조합니다. 'this'는 기본적으로 브라우저의'window' 객체를 참조합니다. 인클로저/기능을 추가하면 컨텍스트가 변경됩니다. – kim3er