问题:下面两个示例的结果对象obj
有什么不同吗?
关闭示例:
var myClosure = function(paramId) {
return {
Id : paramId,
getId : function() {console.log(this.Id)},
setId : function(sId) {this.Id = sId}
};
}
var obj = myClosure(2);
obj.getId();//outputs 2
obj.setId(5);
obj.getId();//outputs 5
构造函数示例:
var MyConstr = function(Id)
{
this.Id = Id;
this.getId = function() { console.log(this.Id)};
this.setId = function(sId) {this.Id = sId};
}
var obj = new MyConstr(2);
obj.getId();//outputs 2
obj.setId(5);
obj.getId();//outputs 5
我知道最好的做法是使用构造函数来创建对象,因为这是其基本目的,并且不会让 future 的代码读者感到困惑。我在这里提问的目的是出于好奇。最终结果是否存在某种差异?是对象、内存使用还是其他什么?
最佳答案
两个对象将具有相同的属性和方法。但是,使用 new MyConstr
构造的将具有引用 MyConstr.prototype 的 [[proto]],从而允许它继承方法和属性。
您没有使用这些功能,因此在您的情况下没有什么区别,但您实际上应该在原型(prototype)上定义 setId
和 getId
,这会节省内存(不再需要复制每个实例上的方法)和一点时间(构造函数将完成更少的工作)。
此外,构造实例将允许您使用 instanceof
运算符。
关于javascript - 使用构造函数与闭包创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43584224/