-4
.name
생성자 b 속성을 재정의하려고합니다. 하지만 작동하지 않습니다. 코드가 뭐가 잘못 됐어.프로토 타입을 사용하여 개체 속성 덮어 쓰기
function b(){
this.name="johnson"
}
b.prototype.name="david"
var a= new b()
alert(a.name)
.name
생성자 b 속성을 재정의하려고합니다. 하지만 작동하지 않습니다. 코드가 뭐가 잘못 됐어.프로토 타입을 사용하여 개체 속성 덮어 쓰기
function b(){
this.name="johnson"
}
b.prototype.name="david"
var a= new b()
alert(a.name)
당신이 당신의 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];
}
. 내가 틀린 내용을 게시 했습니까? – Carlos
글쎄, 당신이 기대하는 것과 당신이 얻는 것은 아무런 문제가 없다는 것을 말하지 않고 "그것이 효과가 없다"고 말하는 것입니다. –