gpt4 book ai didi

javascript - childObj.prototype = Object.create(parentObj.prototype) 和 childObj.prototype = parentObj.prototype 有什么区别?

转载 作者:行者123 更新时间:2023-11-29 16:50:06 30 4
gpt4 key购买 nike

我想知道它们之间的区别:

childObj.prototype = Object.create(parentObj.prototype)

childObj.prototype = parentObj.prototype;

因为它们都需要在子对象中调用父构造函数才能访问构造函数属性。

我知道 Object.create 函数是如何工作的,我注意到区别仅在于它返回一个带有父原型(prototype)的新对象。我想我不理解的是返回一个带有父原型(prototype)的新对象的效果。

最佳答案

您的第一个示例是正确的方法,因为它创建了一个新对象,并将 parentObj.prototype 作为其 [[Prototype]]:

childObj.prototype = Object.create(parentObj.prototype); // { __proto__: parentObj.prototype }

第二个只是将 childObj.prototype 设置为与 parentObj.prototype 相同的对象。这会导致一些问题:

function parentObj() {
}

parentObj.prototype.parentFn = function() { console.log('parent'); };


function childObj() {
}

childObj.prototype = parentObj.prototype;

// here we are writing onto parentObj.prototype as well!!!
childObj.prototype.childFn = function() { console.log('child'); };

var child = new childObj();

var parent = new childObj();

child.parentFn(); // 'parent'
parent.childFn(); // 'child' --- this should not happen!!!

在直接赋值对象时,我们已经写到父类.prototype上了。

关于javascript - childObj.prototype = Object.create(parentObj.prototype) 和 childObj.prototype = parentObj.prototype 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36870003/

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