我一直在使用codeschool.com的backbone.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
}));
我觉得它之前应该还有用......当没有一个括号时发生了什么?
答案 0 :(得分:3)
它使用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 }
答案 1 :(得分:1)
回答另一种方式,您需要使用Backbone.Router实例,您可以先使用自己的路由器进行扩展。如:
var AppRouter = Backbone.Router.extend({
routes: {
// code
}
});
var router = new AppRouter();
Backbone.history.start();
示例中的代码首先评估extend调用,然后创建一个带有返回值的实例。最终结果是相同的,但如果您不知道括号导致评估发生,可能会有点误导。