Javascript Backbone.Model.extend不创建实例属性

Javascript Backbone.Model.extend不创建实例属性,javascript,backbone.js,Javascript,Backbone.js,我不熟悉主干和JS,所以如果我错了,请纠正我 使用backbone.js站点中的示例 var Note = Backbone.Model.extend({ initialize: function() { ... }, author: function() { ... }, coordinates: function() { ... }, allowedToEdit: function(account) { return true; }

我不熟悉主干和JS,所以如果我错了,请纠正我

使用backbone.js站点中的示例

var Note = Backbone.Model.extend({
    initialize: function() { ... },
    author: function() { ... },
    coordinates: function() { ... },
    allowedToEdit: function(account) {
        return true;
    } 
});
Backbone.js说

要创建自己的模型类,您需要扩展主干.Model并提供实例属性,>以及可选的类属性,以便直接附加到构造函数

所以我创建了两个对象

var n1 = new Note;
var n2 = new Note;
现在,属性autor、allowedToEdit坐标等不是n1和n2的实例属性。它们是在proto链接下创建的。如何在backbone.js中创建实例属性

此外,如果我试图在对象中修改javascript中的继承属性,则继承属性不会更改。相反,将在对象实例属性中创建具有相同名称的新属性。我怎样才能做到这一点?
提前感谢…

我相信您对extend的功能有点困惑。Extend类似于继承。如果以这种方式扩展
模型
,则创建一个名为
Note
的派生“类”,该类现在具有这些成员函数

但那不是你想要的,我不认为。您需要具有这些数据属性的模型。向实例添加数据很简单:

var Note = Backbone.Model.extend({});
var n1 = new Note({
    author: "Gautham",
    coordinates: {x: 200, y: 100},
    allowedToEdit: true
});

var author = n1.get("author");
换句话说,主干模型上的数据属性是动态的。您不需要在
注释中声明它们

但是,如果您希望
注释
派生具有这样的属性,则始终可以通过
get
函数将它们定义为代理:

var Note = Backbone.Model.extend({
    author: function() { return this.get('author'); },
    coordinates: function() { return this.get('coordinates'); }
    allowedToEdit: function() { return this.get('allowedToEdit'); }
});
var n1 = new Note({...});
var author = n1.author();

我相信您对extend的功能有点困惑。Extend类似于继承。如果以这种方式扩展
模型
,则创建一个名为
Note
的派生“类”,该类现在具有这些成员函数

但那不是你想要的,我不认为。您需要具有这些数据属性的模型。向实例添加数据很简单:

var Note = Backbone.Model.extend({});
var n1 = new Note({
    author: "Gautham",
    coordinates: {x: 200, y: 100},
    allowedToEdit: true
});

var author = n1.get("author");
换句话说,主干模型上的数据属性是动态的。您不需要在
注释中声明它们

但是,如果您希望
注释
派生具有这样的属性,则始终可以通过
get
函数将它们定义为代理:

var Note = Backbone.Model.extend({
    author: function() { return this.get('author'); },
    coordinates: function() { return this.get('coordinates'); }
    allowedToEdit: function() { return this.get('allowedToEdit'); }
});
var n1 = new Note({...});
var author = n1.author();

您希望使用默认属性,这是您期望的行为:

var Note = Backbone.Model.extend({
  defaults:function(){
    return {
      author : 'Default author',
      coordinates : [0,0],
    };
  }
});

var note1 = new Note;
var note2 = new Note;
var note3 = new Note({author: 'Daniel!', coordinates:[9,9]});

console.log( note1.toJSON() );
console.log( note2.toJSON() );
console.log( note3.toJSON() );

您希望使用默认属性,这是您期望的行为:

var Note = Backbone.Model.extend({
  defaults:function(){
    return {
      author : 'Default author',
      coordinates : [0,0],
    };
  }
});

var note1 = new Note;
var note2 = new Note;
var note3 = new Note({author: 'Daniel!', coordinates:[9,9]});

console.log( note1.toJSON() );
console.log( note2.toJSON() );
console.log( note3.toJSON() );
您应该执行
n1.get(“author”)
而不是
n1.author
,因为这将允许触发
change
事件。如果您正在寻找其他内容,那么这是可能的
var note=Backbone.Model.extend({},{hello:function(){alert('Hi Dude');})note.hello()那样使用它
但是每个实例并不是只有您应该执行的类才有它们
n1.get(“author”)
而不是
n1.author
,因为这将允许触发
change
事件。如果您正在寻找其他内容,那么这是可能的
var note=Backbone.Model.extend({},{hello:function(){alert('Hi Dude');})note.hello()那样使用它但并非每个实例都有它们,而只是类