我已经开始使用匿名构造函数的实例作为原型链的底部。这允许我做一些奇怪的构造函数,比如创建闭包:
var car = new function() {
var wheels = 4;
this.getWheels = function() {
return wheels;
}
};
现在,如果我打电话:
console.log(car);
按预期记录对象:Object { getWheels: car</this.getWheels() }
。另外,如果我打电话:
var toyota = new car();
,我按预期收到TypeError: car is not a constructor
。但是,如果我打电话:
var toyota = new car.Constructor();
,我从前面收到了匿名函数的新实例。如果我打电话的事实:
console.log(car.constructor);
控制台中记录了 function car<()
。
首先,为什么名为car
的构造函数,即使它创建的唯一对象也称为car
?其次,这可以被认为是一个内存泄漏,因为匿名函数在被调用后被保存了吗?我很难理解这一点。谢谢。
编辑:我刚刚发现这种模式确实被认为是浪费内存。如果有人想知道,更合适的模式是模块模式:
var car = function() {
var wheels = 4;
return {
getWheels: function() {return wheels},
}
}();