博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的继承之寄生式继承
阅读量:5214 次
发布时间:2019-06-14

本文共 1158 字,大约阅读时间需要 3 分钟。

寄生式(parasitic)继承是与原型式继承紧密相关的一种思路。

寄生式继承的思路与寄生构造函数和工厂模式类似(这里提到的寄生构造函数和工厂模式都是创建对象的方法,有时间会写博客),即创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象。最后再像真的是它做了所有工作一样返回对象。

还是要用之前的object函数:

function object(o){    function F(){}    F.prototype = o;    return new F();        }

以下代码示范了寄生式继承。

function createAnother(original){    var clone = object(original);     //通过调用函数object创建一个新对象    clone.sayHi = function(){     //以某种方式来增强这个对象        alert("hi");    };    return clone;    //返回这个对象}

  在这个例子中,createAnother()函数接受一个参数,也就是将要作为新对象基础的对象。然后把这个对象(original)传给object()函数,将返回的结果赋值给clone。此时,original的实例属性和实例方法变成clone对象的原型属性和原型方法。接着再为clone对象添加一个新方法sayHi(),最后返回clone对象。可以像下面这样来使用createAnother()函数。

var person = {    name: "Nico",    friends: ["Shelby","Court","Van"]};var anotherPerson = createAnother(person);anotherPerson.sayHi();    //'hi'

上述代码基于person返回了一个新对象——anotherPerson。新对象不仅具有person的所有属性和方法(person的属性和方法都被添加到anotherPerson原型对象上),而且还有自己的sayHi()方法。

在主要考虑对象而不是自定义类型和构造函数的情况下,寄生式继承也是比较有用的。前面示范继承模式时使用的object()函数不是必须的。任何能够返回新对象的函数都适用于此模式。

但是,使用寄生式继承来为对象添加函数,会由于做不到函数复用而降低效率。这一点与构造函数类似。  

posted on
2016-04-28 23:10 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/gothClaudia/p/5444739.html

你可能感兴趣的文章
JVM 类型的生命周期学习
查看>>
图片加载失败显示默认图片占位符
查看>>
2018 ZJCPC
查看>>
【★】浅谈计算机与随机数
查看>>
[SoapUI] 在执行某个TestSuite之前先执行login或者其他什么前置步骤
查看>>
[转载]宇宙文明等级的划分标准
查看>>
Jmeter的log输出控制
查看>>
C扩展 C++回顾到入门
查看>>
[Codeforces] #441 div.2
查看>>
Error connecting to database: No such file or directory
查看>>
【iOS】单例模式
查看>>
Mybatis 事务管理
查看>>
结对编程——黄金点游戏
查看>>
使用OpenSSL转换X509 PEM与PFX证书
查看>>
Release That Record Lock!
查看>>
Js COOkie 读取
查看>>
搜索引擎选择: Elasticsearch与Solr
查看>>
解决方法:配置群集时# gem install redis 报错:Unable to require openssl, install OpenSSL and rebuild ruby...
查看>>
你的商业模式可行吗?
查看>>
设计 从用例图开始...
查看>>