gpt4 book ai didi

javascript - cls Parent.prototype 和 object.create(cls Parent.prototype) 的区别

转载 作者:行者123 更新时间:2023-11-30 12:46:50 25 4
gpt4 key购买 nike

我如何在 javasciript 中进行原型(prototype)继承。通常我这样做和

 derivedFn.prototype = object.create(clsParent.prototype)

但是今天我知道我们也可以这样做结果是一样的所以有什么区别

derivedFn.prototype = clsParent.prototype

例如

function clsParent() {
this.myName = "faizan"
this.getMyName = function() {}
}
clsParent.prototype.aProp = "property in prototype"

function clsChild() {
this.Fname = "abr"
}

clsChild.prototype = clsParent.prototype; //what is the difference
//Object.create(clsParent.prototype);
// what is the difference if i do inheritance by this
var myObj = new clsChild();
console.log(myObj.myName);
console.log(myObj.aProp);

代码已给出,请说明这两种继承方式的区别

最佳答案

当你说

clsChild.prototype = clsParent.prototype;

您正在使 clsChildclsParent 的原型(prototype)相同。因此,如果您对 clsChild.prototype 进行更改,这些更改也将在使用 new clsParent() 创建的任何对象中可见。

尝试,

clsChild.prototype.a = 1000;
console.log(new clsParent().a);
// 1000

但是当您执行 Object.create(clsParent.prototype) 时,它将创建一个从 clsParent.prototype 扩展而来的全新对象。因此,更改 clsChild.prototype 不会影响 clsParent.prototype

建议:

在原型(prototype)中存储属性通常不是一个好主意,因为它会被所有实例共享。仅当您的用例需要时才应执行此操作。

clsParent.prototype.aProp = "property in prototype"; // Don't do this

关于javascript - cls Parent.prototype 和 object.create(cls Parent.prototype) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com