JS(十五)继承模式,命名空间,对象枚举(上)

写在最前面

继承的发展史

  • 传统形式 --> 原型链
    • 过多的继承了没有用的属性
  • 借用构造函数
    • 不能继承借用构造函数的原型
    • 每次构造函数都要多走一个函数
  • 共享原型
    • 不能随便改动自己的原型
  • 圣杯模式
原型链的继承


A.prototype.name = "wu";
function A (){
    
}
var a = new A();

B.prototype = a;
function B (){
    
}
var b = new B();


C.prototype = b;
function C (){
    
}

var c = new C();
借用构造函数继承

function Person(name,age,sex){
    this.name = name;
    this.age = age;
    this.sex = sex;
}

function Student(name,age,sex,grade){
    Person.call(this,name,age,sex);
    this.grade = grade;
}

var sutdent = new Student();

共享原型
Father.prototype.lastName = "tang"
function Father(){
    
}

function Son() {
    
}

Son.prototype = Father.prototype;

var son = new Son();
var father =  new Father();

//缺点不能随便修改自己的原型

比如我在下面
Son.prototype.sex = "male";
son.sex//打印出"male";
father.sex = "male";
因为他们两个的原型指向了同一个地方;
圣杯模式
Father.prototype.lastName = "tang"
function Father(){
    
}

//我自己设置个中间层
function F(){
    
}

function Son() {
    
}

F.prototype = Father.prototype;

Son.prototype = new F();

//设置成一个中间层
//这样子写的好处就是son在自己的原型上面加东西
// 不会影响别的原型,因为son的原型是new F(); new F的原型才是Father.prototype
function inherit (Target,Origin){
    function F(){}
    F.protptype = Origin.protptype;
    Targrt.prototype = new F();
    Targrt.prototype.constructor = Target;
    Targrt.prototype.uber = Origin.prototype
    
}

Father.prototype.lastName = "wu";
function Father(){
    
}

function Son(){
    
};

可以关注一下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值