首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >childObj.prototype = Object.create( parentObj.prototype )和childObj.prototype =parentObj.prototype有什么区别?

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

Stack Overflow用户
提问于 2016-04-26 15:55:33
回答 3查看 114关注 0票数 2

我想知道以下几个方面的区别:

代码语言:javascript
复制
childObj.prototype = Object.create(parentObj.prototype)

代码语言:javascript
复制
childObj.prototype = parentObj.prototype;

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

我知道Object.create函数是如何工作的,而且我注意到区别仅仅是因为它返回了一个新对象,其中包含了带有父原型的对象。我想我不理解的是返回带有父原型的新对象的效果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-26 16:05:46

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

代码语言:javascript
复制
childObj.prototype = Object.create(parentObj.prototype); // { __proto__: parentObj.prototype }

第二个只是将childObj.prototype设置为与parentObj.prototype相同的对象。这就造成了一些问题:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2016-04-26 16:01:19

基本上,Object.create的第一个参数是原型,第二个参数是属性描述符对象。因此,当您将原型对象单独传递给Object.create时,将创建一个没有任何自身属性的对象,并将传递的对象分配给新创建的对象的__proto__

代码语言:javascript
复制
var x = {a:10};
var y = Object.create(x);
console.log(y); //{__proto__:{a:10}}

但是当您将父母的原型分配给孩子的时候,简单地说,引用是重叠的。这个目标不会发生任何结构上的变化。

票数 2
EN

Stack Overflow用户

发布于 2016-04-26 16:20:08

我能想到的一个不同之处是:

假设你有

代码语言:javascript
复制
c = new childObj()
p = new parentObj()

在这两种情况下

代码语言:javascript
复制
c instanceof parentObj === true

但在第二种情况下

代码语言:javascript
复制
p instanceof childObj === true

但在第一种情况下

代码语言:javascript
复制
p instanceof childObj === false
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36870003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档