在Backbone.js的模型和视图上设置属性的模式是什么?

Cai*_*iro 3 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;
}
Run Code Online (Sandbox Code Playgroud)

但是我在文档和其他教程中看到人们在定义模型或视图时通常不会声明特定的构造函数,他们只是构造这样的对象:

var car = new Car({manufacturer: ford, model: "Mustang", color: "red"});
Run Code Online (Sandbox Code Playgroud)

定义构造函数是错误的还是"丑陋的":

window.Car = Backbone.Model.extend({
    initialize: function(manufacturer, model, color) {
        this.manufacturer = manufacturer;
        this.model = model;
        this.color = color;
    }
});
Run Code Online (Sandbox Code Playgroud)

如果是这样,你能解释一下原因吗?我真的希望这不是一个愚蠢的问题,我没有找到任何相关的问题.

Gre*_*ida 5

您传递多个参数而不是对象的想法很好,但是您希望初始化函数看起来像这样:

window.Car = Backbone.Model.extend({
    initialize: function(manufacturer, model, color) {
        this.set({
            manufacturer: manufacturer,
            model: model,
            color: color
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

您需要使用set来访问属性对象.通过使用,this您可以将属性直接附加到模型.

骨干使用属性对象的原因是它可以在您更改属性时自动触发事件.它也是一种将方法封装在方法中的方法,与您创建的方式相同

private Manufacturer manufacturer;

public Manufacturer getManufacturer()

在java中.