javascript - 在 javascript 中使用 "new"

标签 javascript backbone.js

我正在学习如何使用 require.jsbackbone.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;
});

有人知道为什么吗?

最佳答案

Backbone.Model.extend 返回一个构造函数——而不是一个实际的对象。在使用 new (如第二个示例)实例化之前,构造函数不是对象(因此不会有任何属性)。这意味着 toJSON 也不可用,您最终会看到您看到的错误。

当您准备好实际创建一个新的 personModel 时,您可以这样做(我假设您在上面描述的模块已被定义为“Person”):

define("main", ["Person"], function (Person) {
  var me = new Person({ conversations: ['Hello, world']});
});

关于javascript - 在 javascript 中使用 "new",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9796268/

相关文章:

javascript - 主干未捕获类型错误

javascript - AngularJS 推送不起作用

javascript - 如何在没有 'onchange' 的下拉列表中显示预选值

javascript - Backbone.js 模板不从模型继承属性

javascript - Backbone 僵尸观点和良好实践

jquery - 为自定义非 RESTful 服务器覆盖 Backbone 中的持久性方法

javascript - 检查 javascript 源是否使用了禁止的函数

javascript - 基于点击事件用JQuery横向添加类

javascript - 使用javascript正确处理cssRules

javascript - 克隆主干模型属性