-->
  • 39141

    文章

  • 313

    评论

  • 27

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

JavaScript(四)——原型式继承

喜欢本站的朋友可以收藏本站,或者加入QQ群:172816590Web网页设计师,我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

道格拉斯·克罗克福德在2006年提出了原型式继承,他的想法是基于已有的对象借助原型创建新对象,同时还不必因此创建一个自定义类型。为此,他给出了下面的函数:

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

object函数内部,先创建了一个临时性的构造函数,然后将传入的对象作为这个构造函数的原型,最后返回了这个临时类型的一个新实例。其实本质还是原型链继承,只不过达到的效果是没有为新创建的对象单独声明一个类型,相当于简化版的原型链继承。来看下面具体的示例:

let person = {
  name: 'bob',
  friends: ['jack', 'rose']
}

let p = object(person);

console.log(p);
console.log(p2);

结果如下:

这个效果和下面这种写法差不多

let p2 = {};
let p2.__proto__ = p;

console.log(p);
console.log(p2);

结果如下:

那为什么不直接使用这种方式呢?原因之一是直接操作对象的__proto__属性比较损耗浏览器的性能。

既然还是原型继承,那么原型继承的数据共享问题当然也是存在的,如下示例:

p2.friends.push('lily');
console.log(p.friends);//["jack", "rose", "lily"]
console.log(p2.friends);//["jack", "rose", "lily"]

那么原型式继承的意义在哪儿呢?意义在于,某些情况下只是简单地想让一个对象与另一个对象保持继承关系,此时没有必要兴师动众地先创建一个构造函数,原型式继承就派上用场了。

原型式继承如此好用,以致于ECMAScript标准委员会都看不下去了,直接在ES5中通过新增Object.create()方法规范化了原型式继承。这个方法接收两个参数:一个用作新对象的原型,一个用于定义新对象的额外属性。在只传入一个参数的情况下,Object.create()和object()效果相同。

还是上面的示例,使用Object.create()创建p3,如下图所示

传入两个参数:如下所示

关于道格拉斯的介绍。


 转载至链接:https://my.oschina.net/bob1900/blog/3008221。


您觉喜欢本网站,或者觉得本文章对您有帮助,那么可以选择打赏。
打赏多少,您高兴就行,谢谢您对梁钟霖这小子的支持! ~(@^_^@)~

  • 微信扫一扫

    微信打赏
  • 支付宝扫一扫

    支付宝打赏
转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤