3

我是 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;
    }
});

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

4

2 回答 2

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()

在爪哇。

于 2012-07-11T18:47:21.850 回答
0

它类似于将上下文对象传递给 Java 中的方法(在需要将某些状态传递给无状态环境中的方法时完成)。碰巧该方法是一个构造函数。我认为这没有特定的官方模式。这是 javascript 中的常见范例。

于 2012-07-11T18:22:35.577 回答