不好意思因为懒,,我懒得弄图,,就是代码+注释
//之前的帖子 js原型(三) 和js 构造函数 继承 都已经说了继承,但都不是很好
//目前推荐使用 如下方法
function Foo(){
this.a = 1;
Foo.prototype.b = 2;
Foo.prototype.show = function(){
console.log(this.b)
}
}
function Bar(){
Foo.call(this);
this.c = 3;
}
Bar.prototype = Object.create(Foo.prototype);
var bar = new Bar();
bar.show();//2
//首先执行的是 Bar.prototype = Object.create(Foo.prototype); es6 貌似有新语法 更加安全准确官方的修改。。
//但是可读性不如这个。。。而且我也写习惯了。。。。。当然你也可以用新语法
//Object.setPrototypeOf( Bar.prototype, Foo.prototype );
//执行完之后 Bar。prototype 指向了 Foo.prototype Bar的后代就能访问到 Foo.prototype的 属性b 和 函数show了。设计的时候b和show就是设计成可以共享的。函数自然不用说。属性就要视情况而定。比如一个类 人每个人都要能都遵循一样的吃饭规则,吃饭这个函数可以共用,所有人都共用一个家园 -- 地球 家园这个属性也可以共用,但是每个人都有自己的名字,名字就不能共用,好比Foo.a。
//所以Bar 执行Foo.call(this) 在Bar上创建了一个a 当然也会执行 Foo.prototype.b = 2;但是无所谓。比如我现在可以访问bar.b 结果是2。那么如果我又var bar2 = new Bar()。 还是赋值成2 那结果还是没问题。如果我手动更改bar.b的值。那么就会发生屏蔽。具体看我的ja原型(二)。这样就可以做到每次new 每个对象有各自属于自己的a和共用的b和show