我是Javascript框架世界的新手,我非常喜欢Backbonejs的工作方式。 但我有一个关于模型和视图的构造函数的问题。我已经开发了多年使用类似Java的语言,我习惯于定义这样的构造函数:
public Car(Manufacturer manufacturer, String model, Color color) {
this.manufacturer = manufacturer;
this.model = model;
this.color = color;
}
但是我在文档和其他教程中看到人们在定义模型或视图时通常不会声明特定的构造函数,他们只是构造这样的对象:
var car = new Car({manufacturer: ford, model: "Mustang", color: "red"});
定义构造函数是错误还是“丑陋”,如:
window.Car = Backbone.Model.extend({
initialize: function(manufacturer, model, color) {
this.manufacturer = manufacturer;
this.model = model;
this.color = color;
}
});
如果是这样,你能解释一下原因吗? 我真的希望这不是一个愚蠢的问题,我没有找到任何相关的问题。
答案 0 :(得分:5)
您传递多个参数而不是对象的想法很好,但是您希望初始化函数看起来像这样:
window.Car = Backbone.Model.extend({
initialize: function(manufacturer, model, color) {
this.set({
manufacturer: manufacturer,
model: model,
color: color
});
}
});
您需要使用set
来访问属性对象。通过使用this
,您可以将属性直接附加到模型中。
骨干使用属性对象的原因是它可以在您更改属性时自动触发事件。它也是一种将字段封装在方法中的方法,与创建
的方式相同 private Manufacturer manufacturer;
和
public Manufacturer getManufacturer()
在java。
答案 1 :(得分:0)
它类似于将上下文对象传递给Java中的方法(在无状态环境中需要将某个状态传递给方法时)。碰巧该方法是一个构造函数。我认为没有具体的官方模式。这是javascript中的常见范例。