使用模块模式时如何创建对象的新实例?
How do I create a new instance of an object when using the module pattern?
我正在使用 Javascript 的 "module pattern" 创建一个新的 class。这是我拥有的:
var Car = (function() {
var internal = {};
internal.init = function(color, brand) {
internal.color = color;
internal.brand = brand;
return internal;
}
return internal;
})();
但是,当我创建新实例时,似乎所有 return 都具有相同的数据:
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"
我该如何修复它,使其 return 成为初始化时使用的数据?
您应该在 init
方法中实例化一个 class。
你应该在你的模块中创建一个 class 并在你的 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
您正在混合一些概念,以客观地解决您的问题:
var Car = (function() {
var internal = {};
internal.init = function(color, brand) {
var car = {}
car.color = color;
car.brand = brand;
return car;
}
return internal;
})();
你做了这样的事情:
- 创建了一个匿名函数并执行了它。执行做了:
- 创建一个对象并分配给一个名为internal的变量。
- 在 那个单个实例 上创建一个函数以再次更改 自身 和 return 自身.
- Return即单实例.
如你所见,两次调用init只是改变同一个对象,而不是创建一个新对象。
您必须每次创建一个新实例才能实现您的期望。无论如何,请阅读 new 运算符和 prototypes 以更好地理解该主题。
我正在使用 Javascript 的 "module pattern" 创建一个新的 class。这是我拥有的:
var Car = (function() {
var internal = {};
internal.init = function(color, brand) {
internal.color = color;
internal.brand = brand;
return internal;
}
return internal;
})();
但是,当我创建新实例时,似乎所有 return 都具有相同的数据:
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"
我该如何修复它,使其 return 成为初始化时使用的数据?
您应该在 init
方法中实例化一个 class。
你应该在你的模块中创建一个 class 并在你的 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
您正在混合一些概念,以客观地解决您的问题:
var Car = (function() {
var internal = {};
internal.init = function(color, brand) {
var car = {}
car.color = color;
car.brand = brand;
return car;
}
return internal;
})();
你做了这样的事情:
- 创建了一个匿名函数并执行了它。执行做了:
- 创建一个对象并分配给一个名为internal的变量。
- 在 那个单个实例 上创建一个函数以再次更改 自身 和 return 自身.
- Return即单实例.
如你所见,两次调用init只是改变同一个对象,而不是创建一个新对象。
您必须每次创建一个新实例才能实现您的期望。无论如何,请阅读 new 运算符和 prototypes 以更好地理解该主题。