1 //例如
2 var child = new Parent();
3
4 上面这句代码就等于下面三句
5 var child = {};
6 child.__proto__ = Parent.prototype;
7 Parent.call(child);
1 function Cat(name){
2 Animal.call(this);
3 this.name = name || 'Tom';
4 }
5 ((){
6 创建一个没有实例方法的类
7 var Super = (){};
8 Super.prototype = Animal.prototype;
9 将实例作为子类的原型
10 Cat.prototype = Super();
11 })();
12
13 Test Code
14 var cat = Cat();
15 console.log(cat.name);
16 console.log(cat.sleep());
17 console.log(cat instanceof Animal); true
18 console.log(cat instanceof Cat); true
19
20 感谢 @bluedrink 提醒,该实现没有修复constructor。
21
22 Cat.prototype.constructor = Cat; 需要修复下构造函数
2 Animal.call(3 5 Cat.prototype = new Animal();
第5行代码相当于:
Cat.prototype = {}
Cat.prototype.__proto__ = Animal.prototype
Animal.call(Cat.prototype) //这一步是多余的并不需要
所以 var Super = function(){}; 一个空方法来代替,因为只需要
Cat.prototype.__proto__ = Animal.prototype 就可以了
而现在Super.prototype = Animal.prototype 因此这个方法是最完美的