资讯专栏INFORMATION COLUMN

JavaScript 真·原型继承

Cheng_Gang / 2873人阅读

摘要:之前在学习原型继承的时候,在网上搜了一堆,发现都不是我想要的结果,就想起来我之前在一本书上看到的原型继承方法。书名忍者秘籍第二版,作者原型继承需要两步第一步是把子类的原型设置为父类的实例。

之前在学习“JavaScript 原型继承”的时候,在网上搜了一堆,发现都不是我想要的结果,就想起来我之前在一本书上看到的原型继承方法。(书名:《JavaScript 忍者秘籍(第二版)》,作者:John Resig, Bear Bibeault, Josip Maras)

原型继承需要两步:
第一步是把子类的原型设置为父类的实例。但是这样一来子类实例的 constructor 就指向父类了,所以需要手动修复一下子类的 constructor。
于是就有了第二步:通过 Object.defineProperty 方法来把子类的 constructor 修正为子类。

以下是根据书中内容自己写的:

function Person() {}
function Ninja() {}

Ninja.prototype = new Person()
Object.defineProperty(Ninja.prototype, "constructor", {
    enumerable: false,
    value: Ninja,
    writable: true
})

let ninja = new Ninja()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104802.html

相关文章

  • 如何理解JavaScript原型原型链?

    摘要:之前有朋友问怎么去理解原型和原型链的问题。理解原型链的小技巧将箭头视作泛化子类到父类关系那么图中所有的虚线将构成一个继承层级,而实线表示属性引用。原型链是实现继承的重要方式,原型链的形成是真正是靠而非。 之前有朋友问怎么去理解原型和原型链的问题。这个问题,在面试中,很多同学经常都会遇到。这里给大家讲讲,方便大家记忆。 JavaScript的特点JavaScript是一门直译式脚本...

    xuexiangjys 评论0 收藏0
  • 如何理解JavaScript原型原型链?

    摘要:之前有朋友问怎么去理解原型和原型链的问题。理解原型链的小技巧将箭头视作泛化子类到父类关系那么图中所有的虚线将构成一个继承层级,而实线表示属性引用。原型链是实现继承的重要方式,原型链的形成是真正是靠而非。 之前有朋友问怎么去理解原型和原型链的问题。这个问题,在面试中,很多同学经常都会遇到。这里给大家讲讲,方便大家记忆。 JavaScript的特点JavaScript是一门直译式脚本...

    adie 评论0 收藏0
  • 【前端芝士树】Javascript原型原型

    摘要:在创建对象不论是普通对象还是函数对象的时候,都有一个叫做的内置属性,用于指向创建它的构造函数的原型对象,也就是。因为一个普通对象的构造函数所以原型链原型链的形成是真正是靠而非。参考文章最详尽的原型与原型链终极详解,没有可能是。 【前端芝士树】Javascript的原型、原型链以及继承机制 前端的面试中经常会遇到这个问题,自己也是一直似懂非懂,趁这个机会整理一下 0. 为什么会出现原型和...

    yy736044583 评论0 收藏0
  • Javascript 深入浅出原型

    摘要:重点实例对象是通过原型对象与构造函数取得联系的。原型链的形成是真正是靠的,而不是。函数对象和原型对象通过和属性进行相互关联。 JavaScript 使用 prototypal 原型模型,虽然这经常被当作缺点提及,但是只要善于运用,其实基于原型的继承模型比传统的类继承还要强大。 个人博客排版更佳:https://haonancx.github.io/ showImg(https://se...

    wpw 评论0 收藏0
  • 一次性搞懂js中的原型原型

    摘要:每个原型都有一个属性指向关联的构造函数由于实例对象可以继承原型对象的属性,所以实例对象也拥有属性,同样指向原型对象对应的构造函数。 showImg(https://segmentfault.com/img/remote/1460000017183104?w=1300&h=834); 构造函数:function Foo ( ) { }; 实例对象:let f1=new Foo; 谈到...

    Freeman 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<