首页 > web前端 > js教程 > JavaScript 继承:Child.prototype = Parent.Prototype 与 Child.prototype = new Parent() - 哪种方法更好?

JavaScript 继承:Child.prototype = Parent.Prototype 与 Child.prototype = new Parent() - 哪种方法更好?

Barbara Streisand
发布: 2024-11-17 15:46:01
原创
357 人浏览过

JavaScript Inheritance: Child.prototype = Parent.Prototype vs. Child.prototype = new Parent() - Which Approach is Better?

Javascript 继承的细微差别:Child.prototype = Parent.Prototype 与 Child.prototype = new Parent()

在 Javascript 中,继承通常使用原型机制来实现。这两种常见方法之间的关键区别在于它们对子对象的 proto 属性的影响。

当使用 Child.prototype = Parent.Prototype 时,子原型和父原型都指向同一个对象。这意味着对子级原型所做的任何更改也会影响父级原型。

但是,当使用 Child.prototype = new Parent() 时,会创建一个继承自父级原型的新对象。这可确保子级原型与父级原型隔离,从而允许独立修改而不影响父级。

对实例属性的影响

在提供的示例中,问题在子构造函数中设置实例属性时会出现:

this.hitBox.width = oImg.width;
this.hitBox.height = oImg.height;
登录后复制

使用 Child.prototype = Parent.Prototype,这些属性将直接添加到子级的原型中,该原型也是父级的原型。结果,子构造函数中的 console.log(this) 显示 proto: Spaceship 因为原型现在设置为 Spaceship。

解决方案:使用 Object.create

为了避免这个问题,建议使用 Object.create(Parent.prototype):

Spaceship.prototype = Object.create(GameObject.prototype);
登录后复制

此策略创建一个继承自父级原型的新对象,同时保持自己独立的原型。添加到子级原型的实例属性不会影响父级原型。

与instanceof的比较

在使用对象instanceof GameObject检查继承的情况下,重要的是请注意,Child.prototype = Parent.Prototype 将无法通过此测试,因为子级的原型不是 GameObject 的实例。相比之下,Child.prototype = new Parent() 将按预期通过测试。

推荐

对于 Javascript 中健壮且隔离的继承,通常首选使用 Child.prototype = Object.create(Parent.prototype) 而不是 Child.prototype = Parent.Prototype.

以上是JavaScript 继承:Child.prototype = Parent.Prototype 与 Child.prototype = new Parent() - 哪种方法更好?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板