链接原型和原型继承

时间:2016-05-27 18:42:37

标签: javascript prototype

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();

感谢!!!

1 个答案:

答案 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");