使用;新";在javascript中
下面是一个关于如何使用require.js和backbone.js的示例。在本例中,模型返回时不使用使用;新";在javascript中,javascript,backbone.js,Javascript,Backbone.js,下面是一个关于如何使用require.js和backbone.js的示例。在本例中,模型返回时不使用new。在我的代码中,我必须使用new,否则会出现错误: Uncaught TypeError: Object function (){a.apply(this,arguments)} has no method 'toJSON' 不起作用: define([ 'underscore', 'backbone' ], function(_, Backbone) { var person
new
。在我的代码中,我必须使用new
,否则会出现错误:
Uncaught TypeError: Object function (){a.apply(this,arguments)} has no method 'toJSON'
不起作用:
define([
'underscore',
'backbone'
], function(_, Backbone) {
var personModel = Backbone.Model.extend({
defaults: {
conversations: 'No Conversations'
},
initialize: function(){
}
});
return personModel;
});
作品:
define([
'underscore',
'backbone'
], function(_, Backbone) {
var personModel = Backbone.Model.extend({
defaults: {
conversations: 'No Conversations'
},
initialize: function(){
}
});
return new personModel;
});
有人知道为什么吗?主干.Model.extend返回一个构造函数,而不是实际的对象。在使用
new
实例化构造函数之前(如第二个示例中所示),构造函数不是对象(因此不会有任何属性)。这意味着toJSON
也不可用,您最终会看到错误
当您准备实际创建一个新的personModel
时,您可以这样做(我假设您上面描述的模块被定义为“Person”):
只是为了更详细的解释,无论何时在JS中执行新操作,对象都会获得_proto引用,从而访问原型变量和方法-无论何时需要继承,这都是很好的做法 举例说明:
function Animal(name) {
this.name = name
}
Animal.prototype = {
canWalk: true,
sit: function() {
this.canWalk = false
}
}
var incompleteAnimal = Animal('cat');
alert (incompleteAnimal.canWalk) //error undefined variable
var completeAnimal = new Animal('cat')
alert (completeAnimal.canWalk); //true
只有在执行新操作时,才能访问canWalk变量和sit函数我最初认为personModel的范围有问题,但我误读了代码。因此,我想在这一点上我会选择@rjz+感谢你们两位提出的好问题和回答在我的例子中,哪里是“最好”的地方来称呼新人?在模型定义中?这会用更多的变量污染DOM吗?我不确定应用程序的其余部分是什么样子,但可能没有任何理由在您概述的模块中实例化它。我将用一个例子更新我的答案。+1我需要在初始化ItemView时“新建”模型。
function Animal(name) {
this.name = name
}
Animal.prototype = {
canWalk: true,
sit: function() {
this.canWalk = false
}
}
var incompleteAnimal = Animal('cat');
alert (incompleteAnimal.canWalk) //error undefined variable
var completeAnimal = new Animal('cat')
alert (completeAnimal.canWalk); //true