Javascript 实现方法继承

最近在了解 javascript 的继承机制,了解到 Javascript 的机制是用时复制,继承是原型链继承,现在有种一知半解的感觉,在此记录一下:

每一个构造函数有自己的 prototype 属性,指向 prototype 这个对象,prototype 这个对象有一个 constructor 属性,指向这个构造函数,实例的proto指向构造函数的 prototype:

(我自己画了一张草图)
extend.png
所以实现一个简单继承很简单:

1
2
3
4
5
6
7
8
function Person(){
this.name = 'Person';
};
Person.prototype.getName = function(){
return this.name;
};
var person = new Person();
console.log(person.getName());//Person

如果我们有一个新的构造函数要继承这个方法呢,只需要改变这个构造函数的 prototyope 的指向:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Person(){
this.name = 'Person';
};
Person.prototype.getName = function(){
return this.name;
};
var person = new Person();// Person
var Bar = function() {
this.name = "Bar";
};
Bar.prototype = person.__proto__;
var bar = new Bar();
bar.constructor = Bar;
console.log(bar.getName());// Bar