我是在运行以下代码,
function Person(){} var person1 = new Person(); Person.prototype= { name : "Ann", sayName : function(){ console.log( this.name); } } person1.sayName();
它会显示错误"对象#没有方法'sayName'".这会导致错误,因为person1指向的原型不包含该名称的属性.我的问题是当我改变我定义原型的方式如下:
function Person(){} var person1 = new Person(); Person.prototype.name = "Ann"; Person.prototype.sayName = function(){ console.log(this.name); } person1.sayName();
它与"安"正确运行.谁能告诉我为什么会这样?谢谢.
当您使用实例化"类"时new Person
,将为该新对象分配值Person.prototype
,例如:
person1.__proto__ = Person.prototype
(不是真的,仅用于说明目的.)
这意味着双方person1.__proto__
并Person.prototype
指向同一个对象.
如果你这时候再和完全替代 Person.prototype
用Person.prototype = { ... }
,那么实例的原型和类原型不会指向同一个对象了.
但是,如果使用修改现有原型Person.prototype.name = ...
,则两者都继续指向相同(现在已修改)的对象.