2013-03-10 2 views
1

내가 professional javascript for web developers을 읽고 있어요, 그들은 다음 소개 :자바 스크립트 프로토 타입 논리

이 코드는 작동합니다

var friend = new Person(); 

Person.prototype.sayHi = function(){ 
    alert("hi"); 
}; 

friend.sayHi(); 

하지만이 코드는하지 않습니다

function Person(){ 
} 

var friend = new Person(); 

Person.prototype= { 
    constructor: Person, 
    name: "Nicholas", 
    age: 29, 
    job: "Software Engineer", 
    sayName: function() { 
     alert(this.name); 
    } 
}; 

friend.sayName(); 

나는 것을 얻을, 두 번째 예제에서 프로토 타입은 friend 변수가 인스턴스화 된 후에 정의되지만이 경우 첫 번째 예제가 작동하는 이유는 무엇입니까?

+1

나는 전문가가 아니지만'property' 객체를 완전히 덮어 쓸 수 있습니까? 난 당신이 개체 선언에 원하는 변수를 작성해야한다고 생각하고'Person.prototype.sayName = function() {}'을 사용하십시오. 나는'prototype'도 여러분이 두 번째 예제에서 완전히 덮어 씀으로써 제거하고있는 다른 여러 Object 관련 것들을 포함하고 있다고 생각하고 있습니다. – Sygmoral

+1

첫 번째 샘플에서는 프로토 타입에 속성을 추가하고 두 번째 샘플에서는 전체 프로토 타입을 재정의합니다. 사례는 비교할 수 없습니다. 그들을 비슷하게 보이게 변경하면 같은 행동을 취할 것입니다 – zerkms

답변

4

첫 번째 코드 단편에서 인스턴스에 이미 제공되어있는 기존 프로토 타입을 추가하고 있습니다. 두 번째 단계에서는 이미 friend에 제공된 프로토 타입 객체와 다른 Person에 대한 새로운 프로토 타입을 만듭니다.

프로토 타입에 새 기능을 추가하는 경우 해당 함수가 호출되기 전에 언제든지 할 수 있습니다. 생성자 함수의 프로토 타입에 새 객체를 할당하는 작업은 새 인스턴스를 인스턴스화하기 전에 수행해야합니다.

+0

, 감사합니다! – fox

+0

추가 질문 : 프로토 타입이 첫 번째 예제에서 아직 정의되지 않은 경우 더 이상 작동하지 않겠습니까? – fox

+1

함수를 선언 할 때 기본 프로토 타입이 생성됩니다. – Dennis

관련 문제