Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Backbone.js';模型和视图?_Javascript_Oop_Design Patterns_Backbone.js - Fatal编程技术网

Javascript 在Backbone.js';模型和视图?

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

我是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.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!这样我就不会觉得我在腐蚀什么东西。