javascript – 为什么a.y未定义在这里?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么a.y未定义在这里?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
function A() {}
A.prototype.x = 10;

var a = new A();
alert(a.x); // 10

A.prototype = {
  x: 20,y: 30
};

alert(a.y) // undefined

>为什么它委托给旧的原型的a.x而不是较新的
一?
为什么a.y抛出未定义通过它在原型中设置?

解决方法

这是因为你设置了A.prototype = obj

您已经创建了一个全新的对象作为A.prototype,而不是被一个继承者

考虑,

function A() {}
A.prototype.x = 10;

var p1 = A.prototype; // keep reference to this

var a = new A();

A.prototype = {x: 20,y: 30};

Object.getPrototypeOf(a) === A.prototype; // false,not the new prototype
Object.getPrototypeOf(a) === p1; // true,the old prototype

// however
var b = new A();
Object.getPrototypeOf(b) === A.prototype; // true,this is the new prototype

如果您对旧的原型(我称之为p1)对属性进行了更改,那么这些属性将被a继承

猜你在找的JavaScript相关文章