以下为JS寄生组合继承的实现方式
function Super(b){
this.b = b;
this.fun = function(){}
}
Super.prototype.c = function(){console.log(1111)}
function Foo(a,b){
this.a = a;
Super.call(this,b);
}
var f = new Function();
f.prototype = Super.prototype;
Foo.prototype = new f();
var foo1 = new Foo(1,2);
为什么不直接用以下方式,更简洁而且能实现同样的效果
function Super(b){
this.b = b;
this.fun = function(){}
}
Super.prototype.c = function(){console.log(1111)}
function Foo(a,b){
this.a = a;
Super.call(this,b);
}
Foo.prototype = Super.prototype;
var foo1 = new Foo(1,2);
你是不是打错了
Foo.prototype = Foo.prototype; Foo.prototype = Super.prototype;
Foo.prototype = Super.prototype;
Foo.prototype.c = function(){console.log(1111)}
和
Foo.prototype = new f();
还是不一样吧
还是有微妙的区别的
上面那个 Foo:
{c}←Super
↖{}←Foo
下面那个Foo:
{c}←Super
↖Foo
看到没 Foo的原型链上少了一层
会出现 比如 咱想在Foo的原型上加点方法: Foo.prototype.fn=function(){};
那就会连Super的原型也被改的情况
大哥给点分咱下东西啊QAQ