YUI用的寄生组合式继承

什么是“寄生组合式继承”?

通过借用构造函数来继承属性,通过原型链的混成形式来继承方法。构造函数 + 原型链。

寄生组合式继承是引用类型最理想的继承范式。

寄生组合式继承的基本模式

function inheritPrototype(subType, superType) {
    //创建对象
    var prototype = Object(superType.prototype);
    //增强对象
    prototype.constructor = subType;
    //制定对象
    subType.prototype = prototype;
}
 

函数内部的过程:

第一步,创建超类原型的一个副本;

第二步,创建的副本添加constructor属性,从而弥补因重写原型而失去的默认的constructor属性;

第三步,将新创建的对象(即副本)赋值给子类型的原型。

实例

function SuperType(name) {
    this.name = name;
    this.colors = ["red", "blue", "green"];
}
SuperType.prototype.sayName = function() {
    alert(this.name);
};

function SubType(name, age) {
    SuperType.call(this, name);
    this.age = age;
}
inheritPrototype(SubType, SuperType);
SubType.prototype.sayAge = function() {
    alert(this.age);
};
 

YUI的寄生组合式继承

//定义
function extend(subClass,superClass){
    var F = function(){};
    F.prototype = superClass.prototype;
    subClass.prototype = new F(); //创建超类的一个副本,本质是执行对给定对象的浅复制            
    subClass.prototype.constructor = subClass;  //原来constructor指向superClass,现在改指成subClass本身

    subClass.superclass = superClass.prototype;//加多了个属性指向父类本身以便调用父类函数
    if(superClass.prototype.constructor == Object.prototype.constructor) {//新创建的属性对象会指向Object,因此要重写指向本身
        superClass.prototype.constructor = superClass;
    }
}
//应用
function Person(name) {
    this.name = name;
}
Person.prototype.sayName = function() {
    alert(this.name);
};
function Chinese(name,job) {
    Person.call(this, name);
    this.job = job;
}

extend(Chinese, Person);

Chinese.prototype.sayJob = function() {
    alert(this.job);
};

var c = new Chinese("MirrorAvatar", "coder");
alert(c.sayName());  //MirrorAvatar
 

参考资料:

  1. 《JavaScript高级程序设计》
  2. JS类式继承
先展示下效果 https://pan.quark.cn/s/e81b877737c1 Node.js 是一种基于 Chrome V8 引擎的 JavaScript 执行环境,它使开发者能够在服务器端执行 JavaScript 编程,显著促进了全栈开发的应用普及。 在 Node.js 的开发流程中,`node_modules` 文件夹用于存储所有依赖的模块,随着项目的进展,该文件夹可能会变得异常庞大,其中包含了众多可能已不再需要的文件和文件夹,这不仅会消耗大量的硬盘空间,还可能减慢项目的加载时间。 `ModClean 2.0` 正是为了应对这一挑战而设计的工具。 `ModClean` 是一款用于清理 `node_modules` 的软件,其核心功能是移除那些不再被使用的文件和文件夹,从而确保项目的整洁性和运行效率。 `ModClean 2.0` 是此工具的改进版本,在原有功能上增加了更多特性,从而提高了清理工作的效率和精确度。 在 `ModClean 2.0` 中,用户可以设置清理规则,例如排除特定的模块或文件类型,以防止误删重要文件。 该工具通常会保留项目所依赖的核心模块,但会移除测试、文档、示例代码等非运行时必需的部分。 通过这种方式,`ModClean` 能够协助开发者优化项目结构,减少不必要的依赖,加快项目的构建速度。 使用 `ModClean` 的步骤大致如下:1. 需要先安装 `ModClean`,在项目的根目录中执行以下命令: ``` npm install modclean -g ```2. 创建配置文件 `.modcleanrc.json` 或 `.modcleanrc.js`,设定希望清理的规则。 比如,可能需要忽略 `LICENSE` 文件或整个 `docs`...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值