javascript中的OO编程:将属性作为对象本身是一种好习惯吗?

时间:2013-05-28 13:59:59

标签: javascript oop backbone.js

我用Backbone创建了一些像以前用Java做的对象。

var Lead = Backbone.Model.extend({
    defaults: {
        lng: 0,
        lat: 0,
        distance: 0
    },
    initialize: function () {

    }
});

var Leads = Backbone.Collection.extend({
    model: Lead
});

var Map = Backbone.Model.extend({
    defaults: {
        leads: null
    },
    initialize: function () {
        this.set("leads",new Leads());
    },
    addJson: function (json) {

        var key;

        for (key in json) {
            if (json.hasOwnProperty(key)) {

                var lead = new Lead({ lng: parseFloat(json[key].lng.replace(",", ".")), lat: parseFloat(json[key].lat.replace(",", ".")), distance: json[key].distance });
                this.attributes.leads.add(lead);
            }
        }
    }
});

正如您所看到的,对象Map的属性引导是一个Collection Leads,当它被创建时。但是,这不像Java那样有效,因为我不得不使用:

this.attributes.leads

调用attribut lead的方法之一。

问题:

使用对象作为属性是不好的做法,如果是,我该怎么办?

1 个答案:

答案 0 :(得分:5)

你应该能够在你的循环中做this.get('leads').add(lead);在这种情况下,this.get('leads)将返回(引用)具有leads方法的add()集合。您无法执行this.leads.add,因为this.leads不存在。

Backbone的this.attributes是获取模型所有属性的便捷方式,但是this.set()this.get()首选作为接口,因为在调用这些属性时会触发事件。