我正在使用Javascript"模块模式"创建一个新类。这就是我所拥有的:
var Car = (function() {
var internal = {};
internal.init = function(color, brand) {
internal.color = color;
internal.brand = brand;
return internal;
}
return internal;
})();
但是,当我创建新实例时,它似乎都返回相同的数据:
var ferrari = Car.init('red', 'ferrari');
var audi = Car.init('blue', 'audi');
console.log(ferrari.color + ' ' + ferrari.brand); // --> "blue audi"
console.log(audi.color + ' ' + audi.brand); // --> "blue audi"
如何修复它以便返回用初始化的数据?
答案 0 :(得分:1)
您应该在init
方法中实例化一个班级
您应该在模块中创建一个类,并在init
中实例化它。
这应该这样做:
var Car = (function() {
var internal = {};
var theClass = function(color, brand) {
this.color = color;
this.brand = brand;
}
internal.init = function(color, brand) {
return new theClass(color, brand);
}
return internal;
})();
请参阅:http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript
答案 1 :(得分:0)
您正在混合一些概念,以客观地解决您的问题:
var Car = (function() {
var internal = {};
internal.init = function(color, brand) {
var car = {}
car.color = color;
car.brand = brand;
return car;
}
return internal;
})();
你做了这样的事情:
如您所见,调用init两次只会更改同一个对象,而不是创建一个新对象。
每次都必须创建一个新实例才能实现您的期望。无论如何,请阅读有关新运算符和原型的内容,以便更好地了解该主题。