JavaScript之继承模式,命名空间,对象枚举

继承发展史

1-传统形式 → 原型链

  • 过多的继承了没用的属性(很好理解,不用代码演示了)

2-借用构造函数

  •  不能继承借用构造函数的原型(很好理解,不用代码演示了)
  • 每次构造函数都要夺走一个函数(很好理解,不用代码演示了)

3-共享原型

  • 不能随便改动自己的原型

Father.prototype.lastName = 'deng';
function Father() {
}
function Son() {
}

var son = new son();
son.prototype = Father.prototype;  // 共享的核心代码,即谁都可以共享Father

4-圣杯模式

//圣杯模式
function innherit(Target, Origin) {
    function F() {};
    F.prototype = Origin.prototype;
    Target.prototype = new F();
}
Father.prototype.lastName = 'deng';
function Father() {
    
}
function Son() {

}
inherit (Son, Father);
var son = new son();
var father = new Father();

\\指向紊乱了
son.__proto__  -->  new F().__rpoto__  -->  Father.prototype

\\改正紊乱
function innherit(Target, Origin) {
    function F() {};
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.constructor = Target;  //让继承类的指向归位
    Target.prototype.uber = Origin.prototype;  //让这个类知道它继承的超类是谁?
}



雅虎的Y库提供的一个开源代码

var inherit = (function () {
    var F = function () {};
    return function (Target, Origin) {
        F.prototype = Origin.prototype;
        Target.prototype = new F();
        Target.prototype.constructor = Target;
        Target.prototype.uber = Origin.prototype;
    }
}())

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1学习者1

打赏作者一杯咖啡与妹子坐坐吧

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

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

打赏作者

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

抵扣说明:

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

余额充值