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;
    }
}())
发布了65 篇原创文章 · 获赞 11 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u011280778/article/details/97417731