2014-11-29 6 views
-4

.name 생성자 b 속성을 재정의하려고합니다. 하지만 작동하지 않습니다. 코드가 뭐가 잘못 됐어.프로토 타입을 사용하여 개체 속성 덮어 쓰기

function b(){ 
    this.name="johnson" 
} 

b.prototype.name="david" 
var a= new b() 

alert(a.name) 
+0

. 내가 틀린 내용을 게시 했습니까? – Carlos

+2

글쎄, 당신이 기대하는 것과 당신이 얻는 것은 아무런 문제가 없다는 것을 말하지 않고 "그것이 효과가 없다"고 말하는 것입니다. –

답변

2

당신이 당신의 alert"johnson"을보고있는 경우, 정확히 제대로 작동합니다.

개체에 속성을 직접 추가하면 해당 이름이 프로토 타입에있는 모든 속성보다 우선합니다. 그래서

var a = new b(); 

에서 ... a의 프로토 타입이 name="david", a있는 경우에도 자체은 (b에 호출 내에서 할당) name="johnson"는, 그래서 그 승리했다.

는 객체의 속성 값을 읽는 것은 기본적으로 (__proto__는 [이 될 것이다, ES6에서] 프로토 타입을 참조하는 객체의 마법 속성입니다 가정)과 같이 작동합니다 : 왜 아래로 투표

function getPropertyValue(obj, propertyName) { 

    // Start with the object itself 
    var o = obj; 

    // Loop until we find an object in the prototype chain that has a property called "name" 
    while (!o.hasOwnProperty(propertyName)) { 
     // This one doesn't, look to its prototype 
     o = o.__proto__; 

     // Did it have one? 
     if (!o) { 
      // No, property not found 
      return undefined; 
     } 
    } 
    return o[propertyName]; 
} 
관련 문제