我使用不同的方式创建了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?
上面的截图中有什么区别(以红色圈出)?
答案 0 :(得分:1)
两个对象具有相同的属性,并从同一对象继承。但是,差异很小:
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?
答案 1 :(得分:0)
为变量分配函数时,您创建了一个命名函数。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name
它们功能相同。