我使用不同的方式创建了 2 个对象(object1 和 object2)。 我发现它们之间没有区别,除了它在 Chrome 开发控制台中的显示方式(请参见下面的屏幕截图)
var F;
function create(parent, properties) {
F = function(p) {
for(var i in p){
this[i] = p[i].value;
}
};
F.prototype = parent;
return new F(properties);
}
var prop={ p: { value: 42 } };
var masterObject = {a: "masterObject value"}
var object1 = create(masterObject, prop);
var object2 = Object.create(masterObject, prop);
以下是我的问题:
由于我采用不同的方式创建对象,因此对象(object1 和 object2)之间会有什么区别吗?
从上面的截图(红圈内)可以看出什么区别?
最佳答案
两个对象具有相同的属性,并且继承自同一个对象。但是,有一个小小的区别:
new F();
//vs.
Object.create(F.prototype);
构造函数(为构建对象而调用的函数)应该不同:
object1.constructor!==object2.constructor
因此这些对象不应该相等,但是它没有实际效果,因为很少使用构造函数。
应该因为基本上
F.prototype=parent;
破坏了整个事情,因为 F.prototype.constructor 是用 F 初始化的,所以你要重写它。更多信息请访问 Why is it necessary to set the prototype constructor?
关于javascript - 使用不同方法创建时创建的对象的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717978/