2017-04-07 8 views
0

는 다음 코드를 감안할 때 :프로토 타입 함수는 'this'를 사용할 때 어디에서 가리켜 야합니까?

var User = function(name) { 
    this.name = name; 
}; 

User.prototype.sayHello = function() { 
    console.log('Hi my name is ' + this.name + '.'); 
}; 

var user1 = new User('Bob'); 
user1.sayHello(); 

내가 지금까지 배운 것이 어휘에 앉아 개체에서 전역 객체에 함수 명령문 포인트에 사용, 및 방법에 사용되는 경우 this 키워드

무엇입니까.

new 키워드는 빈 개체를 만들고 생성자를 호출하여 해당 새 개체를 가리 키도록합니다.

하지만 내가 이해하지 못하는 것은 user1이 sayHello 함수를 소유하고 있지 않기 때문에 프로토 타입 체인을 따라갑니다. 그러나 프로토 타입의 함수는 this.name을 참조 할 곳을 어떻게 알고 있습니까?

콘솔의 출력은 다음과 같습니다 때문에 Hi my name is Bob.

+0

var User = function(name) { this.name = name; }; User.prototype.sayHello = function() { console.log('Hi my name is ' + this.name + '.'); }; var user1 = new User('Bob'); console.log(user1.name) user1.sayHello();
아마도 https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain이 새로운 KEYWO 당신에게 –

+0

을 교육합니다 밥으로 해결 rd는 새로운 객체를 생성 할뿐만 아니라 프로토 타입을 새로운 객체에 '자동으로'바인딩합니다. 따라서 user1 자체가 그 메소드를 정의하지는 않았지만 여전히 user1의 메소드입니다. user1 인스턴스의 프로토 타입 체인의 첫 번째 단계는 User.prototype이고 프로토 타입 메서드는 호출 된 인스턴스를이 값으로 사용합니다. – Shilly

답변

0

의 당신의 sayHello가 그래서이의 user1 참조하여 호출 옆에 당신이 출력으로 밥을 얻을 것이다 user1.name에 CONSOLE.LOG을 할 경우 사용자 개체에서 만들었습니다. 이름은