JavaScript 继承(七)原型三

17 篇文章 0 订阅

不好意思因为懒,,我懒得弄图,,就是代码+注释

//之前的帖子里我已经解释过 基本的继承方法
function Foo(){
    this.a = 0;
    Foo.prototype.b = {x:1}
}

var foo = new Foo();//写这句哈的原因还是 不写的话 Foo 没意义 自然也就不能Foo.prototype

function Bar(){
    this.c = {x:2}
}

//继承 Foo的 prototype上的内容
Bar.prototype = Object.create(Foo.prototype)


var bar = new Bar();
console.log(bar.b.x);//1
console.log(bar.c.x);//2
//可以 貌似除了不能访问a没问题。。但是。。。。
var bar2 = new Bar();
bar2.b.x=5;
console.log(bar.b.x);//5
console.log(bar.c.x);//2
//由于bar bar2 都是new Bar得到的然而 Bar.prototype 是 foo(注意不是Foo) 是我创建的一个变量的一个属性
//那我创建的这一个变量的属性肯定只有一个值,当我bar2修改了之后bar那访问当然也是修改之后的值
//要满足继承的要求 要分成公用的和非公用的两种,简单来说有一些东西确实不需要一人一份,比如函数,或者共享的变量
//比如其他语言的静态变量,但是也有不少属性需要bar2 的修改不影响到bar,而且既然Bar继承了Foo应该要能访问a
//所以 解决办法就是Foo把公用的写在prototype上,不公用的就和a这样直接写,然后Bar 先创建一个对象获取到所有
//类似于a这样的属性,然后在修改prototype为Foo.prototype

function Foo_(){
    this.a = 0;
    Foo_.prototype.b = {x:1}
}

function Bar_(){
    Foo_.call(this);//可以看我之前的帖子
    this.c = {x:2}
}

Bar_.prototype = Object.create(Foo_.prototype)

var bar_ = new Bar_();
var bar2_ = new Bar_();
bar2_.a=5;
console.log(bar_.b.x,bar_.a);












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值