将属性/方法扩充到数组?

时间:2012-04-13 12:37:29

标签: javascript arrays properties

enter image description here

最近,我遇到了a question of how jQuery acts as both a function, as well as an object。能够实现的是jQuery实际上是一个附加了属性的函数(因此$())(如$.each())。

现在在我的项目中,我想创建一个模型(技术上是一个东西的数组),向它添加方法,并将它返回到一个将保存它的变量。这样做是明智的吗?它会干扰什么吗?

//i did it like this:
function createModel(name){
    var model = internal.models[name] = [];
    model.add = function(){..logic to add to the model..}

    //more augmented methods here...

    return model;
}

//create a model
var myModel = createModel('test');

//then i can do add
myModel.add('foo');

除此之外,我不想搞乱实际的Array原型。我正在为当前创建的数组执行此操作。


我正在制作的模型与Backbone.js的模型不同,后者是一个数据单元。它更像是Backbone.js的Collection或Database表的同义词。

1 个答案:

答案 0 :(得分:1)

该样式中的某些东西可能会做,也永远不会将模型作为数组启动,总是采用一个函数(构造函数)和一个适当的对象,它们更灵活。

var model = function(data) {
    this.data = data;
};

model.prototype.getData = function() {
    return this.data;
};

var mod = new model({foo:'foo'});

mod.getData().foo