码迷,mamicode.com
首页 > Web开发 > 详细

JS组合继承

时间:2020-01-20 12:37:23      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:空间   new   现在   自定义   参数   this   struct   end   相同   

//定义寄生组合模型
function inherPrototype(SubType,SuperType) {
    var prototype = object.create(SuperType.prototype);
    //create返回一个新的实例,在一个参数时同object()
    SubType.prototype = prototype; 
    prototype.constructor = SubType;
}

function SuperType(name) {
    this.name = name;
    this.color = [‘red‘,‘blue‘,‘green‘];
}
SuperType.prototype.sayname = function () {
    alert(this.name);
}
function SubType(name,age) {
    SuperType.call(this,name);
    this.age = age;
}

inherPrototype(SubType,SuperType);//创建原型链
SubType.prototype.sayage = function () {
    alert(this.age);
}

//object的源码,object和create在传一个参数的时候功能相同,所以我们附上object的源码
function object(o) {
    function F() {}
    F.prototype = o;
    return new F();
}
/*********************************我来分界*****************************************************/
/*********************************我也来分界*****************************************************/
//我们现在进行优化一下,没必要这样自定义函数
function SuperType(name){
    this.name = name;
}
SuperType.prototype.sayname = () => {
    alert(this.name);
}
function SubType(name,age) {
    SuperType.call(this,name);
    this.age = age; 
}

SubType.prototype = object.create(SuperType.prototype);
SubType.prototype.constructor = SubType;
SubType.prototype.sayage = () => {
    alert(this.age);
}

let sub1 = new SubType("xiaohong",18);//现在subtype继承了supetype的属性,
let sub2 = new SubType("xiaoming",19);//而且sub1和sub2这两个实例都有自己的作用域空间,不会影响彼此

/*****************************我是一条分界线=^=*****************************************/
/*****************************我是又一条分界线=^=***************************************/

//现在我们用class来写一下,这里用到了extends方法和super方法
class SuperType{
    constructor(name){
        this.name = name;
    }
    sayname(){
        alert(this.name);
    }
}
class SubType extends SuperType{
    constructor(name,age){
        super(name);
        this.age = age;
    }
    sayage(){
        alert(this.age);
    }
}
/*用class简单的地方在于,我不需要写这么多prototype属性,在定义子类的时候就已经完成了*/
let sub1 = new SubType("xiaohong",18);
let sub2 = new SubType("xiaoming",19);

JS组合继承

标签:空间   new   现在   自定义   参数   this   struct   end   相同   

原文地址:https://www.cnblogs.com/liuxinfuchen/p/12217329.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!