Javascript 在Backbone.js';模型和视图?
我是Javascript框架的新手,我非常喜欢Backbonejs的工作方式。 但是我有一个关于模型和视图的构造函数的问题。多年来,我一直使用类似Java的语言进行开发,我习惯于定义如下构造函数:Javascript 在Backbone.js';模型和视图?,javascript,oop,design-patterns,backbone.js,Javascript,Oop,Design Patterns,Backbone.js,我是Javascript框架的新手,我非常喜欢Backbonejs的工作方式。 但是我有一个关于模型和视图的构造函数的问题。多年来,我一直使用类似Java的语言进行开发,我习惯于定义如下构造函数: public Car(Manufacturer manufacturer, String model, Color color) { this.manufacturer = manufacturer; this.model = model; this.color = color
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.set({
manufacturer: manufacturer,
model: model,
color: color
});
}
});
但我在文档和其他教程中看到,在定义模型或视图时,人们通常不声明特定的构造函数,他们只是构建如下对象:
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.set({
manufacturer: manufacturer,
model: model,
color: color
});
}
});
定义以下构造函数是错误的还是“丑陋的”:
window.Car = Backbone.Model.extend({
initialize: function(manufacturer, model, color) {
this.manufacturer = manufacturer;
this.model = model;
this.color = color;
}
});
如果是,你能解释一下原因吗?
我真的希望这不是一个愚蠢的问题,我还没有发现任何相关的问题。这类似于在Java中将上下文对象传递给方法(在无状态环境中需要将某些状态传递给方法时完成)。碰巧该方法是一个构造函数。我不认为这有一个具体的官方模式。这是javascript中的一个常见范例。您传入多个参数而不是对象的想法很好,但是您希望initialize函数如下所示:
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.set({
manufacturer: manufacturer,
model: model,
color: color
});
}
});
您需要使用set
来访问attributes对象。通过使用此
可以将属性直接附加到模型
主干使用attributes对象的原因是,当您更改属性时,它可以自动触发事件。它也是一种将字段封装在方法中的方法,与创建方法相同
私人制造商代码>
及
公共制造商getManufacturer()
在java中。它不是java。不要期望它遵循完全相同的语法。谢谢你的评论!事实上,我并不期望相同的语法,我只是想知道,一旦两者都有可能,什么是正确的/最好的方法。如果你用这种方式定义你的类,你在创建CarModel
的实例时能访问initialize
?对不起,MilkyWayJoe,我不明白你的问题。谢谢你的回答!但是我看到,如果我将initialize定义为一个带有参数的构造函数,比如函数(man,model,color)
,并使用这个变量定义模型属性,我无法使用模型的get方法访问这些属性,但我可以直接访问属性car.model
。根据我定义这些属性的方式,在主干事件中对模型属性有什么影响吗?谢谢Greg Guida!这样我就不会觉得我在腐蚀什么东西。