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();
谢谢!
发布于 2016-05-28 02:45:20
构造函数的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");https://stackoverflow.com/questions/37490359
复制相似问题