function Person(name){
this.name=name
}
var julia=new Person("Julia");
Person.prototype.sayName=function(){
return "Hello, dear "+ this.name;
}
function Other(name){
this.name=name;
}
var mike=new Other("Mike");
Other.prototype=Object.create(Person.prototype);
mike.sayName();
当我调用mike.sayName();它没有工作,我得到mike.sayName不是一个功能。 我不明白为什么?通过使用Object.create我让Other.prototype继承了具有sayName方法的Person原型。现在,为什么我无法运行mike.sayName();
感谢!!!
答案 0 :(得分:1)
构造函数的prototype
属性只是特殊的,因为它在创建实例时用作[[Prototype]]值。但是,将prototype
替换为另一个对象只会影响更改后创建的实例,它不会神奇地更新现有实例的[[Prototype]]。
var oldproto = Other.prototype;
var mike = new Other("Mike");
Object.getPrototypeOf(mike); // oldproto
Other.prototype = Object.create(Person.prototype);
Object.getPrototypeOf(mike); // oldproto
所以只需交换订单:
Other.prototype = Object.create(Person.prototype);
var mike = new Other("Mike");