关于js原型继承

js的每个类都有一个prototype对象 访问对象的属性时,会先访问到对象自身是否有定义这个属性 如果没有定义,就会去访问对象所属类型的prototype对象是否有此属性

原型继承就是把类型的prototype指向一个父类的新对象,这样每派生一个新类出来都会构造一个新的父类对象作为原型,这个对象和父类的prototype是分离的 因而可以用于添加子类的新属性而不影响父类

> function cls(){xx = function(){console.log(11)}}
undefined
> cls.prototype.xx = function(){console.log(22)}
[Function]
> var x = new cls()
undefined
> x.xx()
22
undefined
> x.xx = function(){console.log(33)}
[Function]
> x.xx()
33
undefined
> x instanceof cls
true
> cls.prototype.xx = function(){console.log(55)}
[Function]
> x.xx()
33
undefined
> var y = new cls()
undefined
> y.xx()
55
undefined
> cls.prototype.xx = function(){console.log(123)}
[Function]
> y.xx()
123
undefined
> cls.prototype
cls { xx: [Function] }
> typeof cls.prototype
'object'
>

  在构造函数中赋值的属性也能被派生类中使用,因为每个对象都运行了一次构造函数,每个对象都有一个此属性的定义 并且这个属性是优先于prototype里的属性的 比如下面的例子:

> function cls(){this.p=11}
undefined
> cls.prototype.p = 22
22
> var obj = new cls()
undefined
> obj.p
11
>

其实这个和LUA利用元数据表的模拟继承非常相似

关于原型继承的写法可以参见:

http://www.cnblogs.com/yangjinjin/archive/2013/02/01/2889368.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fancybit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值