Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/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中_Javascript_Backbone.js - Fatal编程技术网

使用;新";在javascript中

使用;新";在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

下面是一个关于如何使用require.js和backbone.js的示例。在本例中,模型返回时不使用
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