【问题标题】:backbone.js - parentheses needed after "new" keyword?骨干.js - “新”关键字后需要括号?
【发布时间】:2013-10-26 06:17:56
【问题描述】:

我一直在阅读 codeschool.com 的关于bone.js 的教程 并提交:

var AppRouter = new Backbone.Router.extend({
  //code
});
$(function(){ AppRouter.start() });

它给出了以下错误消息:

TypeError: 'undefined' is not a function (evaluating 'AppRouter.start()') :28 :14

但添加一个括号解决了问题

var AppRouter = new (Backbone.Router.extend({
  //code
}));

我觉得它以前应该仍然有效......当少了一个括号时发生了什么?

【问题讨论】:

    标签: javascript backbone.js backbone-routing


    【解决方案1】:

    它使用Backbone.Router.extend 作为构造函数(括号作为构造函数的参数,而不是Backbone.Router.extend 调用的结果(对Backbone.Router.extend 的调用返回一个用作构造函数的函数) . 比如比较:

    function Test()
    {   return function () { this.a = 2; };
    }
    
    console.log(new Test()); // function () { this.a = 2; }
    console.log(new (Test())); // { a: 2 }
    

    【讨论】:

      【解决方案2】:

      以另一种方式回答,您需要使用 Backbone.Router 的实例,您可以先使用自己的路由器对其进行扩展。如:

      var AppRouter = Backbone.Router.extend({
          routes: {
              // code
          }
      });
      
      var router = new AppRouter();
      Backbone.history.start();
      

      您示例中的代码首先评估扩展调用,然后使用返回值创建一个实例。最终结果是相同的,但如果您不知道括号导致评估发生,可能会有点误导。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多