JavaScript错误:“不是构造函数”

我正在使用backbone.js以及jquery和underscore.js

这是我的一些代码(它还没有做任何事情)。 奇怪的是,在点击“/#users”时,没有错误。 错误发生的唯一时间是我然后单击转到另一个哈希,然后单击返回“/#users”。 这是我的代码的一部分,用于向最终Users = new Users();接收错误的行Users = new Users(); 错误说“用户不是构造函数”:

 var User = Backbone.Model.extend({ url: function(){return 'api/user/id/' + this.id;} }); var Users = Backbone.Collection.extend({ model: User, url: function(){return 'api/users';}, initialize: function() { } }); var UsersView = Backbone.View.extend({ initialize: function() { this.users = this.options.users; this.render(); }, render: function() { _(this.users).each(function(){ // $('#app').append('here'); }); var template = _.template($('#usersTemplate').text()); $(this.el).html(template({users: this.users})); $('#app').html(this.el); } }); var UserView = Backbone.View.extend({ initialize: function() { this.user = this.options.user; this.render(); }, render: function() { var template = _.template("hello {{user.name}}"); $(this.el).html(template({user: this.user.toJSON()})); $('#app').html(this.el); } }); var Controller = Backbone.Controller.extend({ routes: { 'dashboard' : 'dashboard', 'users' : 'showusers' }, showuser: function(id) { UserList.fetch({ success: function(){ new UserView({user: User}); }, error: function(){ alert('an error of sorts'); } }); }, showusers: function() { Users = new Users(); Users.fetch({ success: function(Users) { new UsersView({users: Users}); }, error: function() { } }); }, dashboard: function() { Users = new Users; Users.fetch({ success: function() { new UsersView({users: Users}); }, error: function() { } }); } }); $(document).ready(function(){ var ApplicationController = new Controller; Backbone.history.start(); }); 

如果你好奇,随附的HTML:

     Administration Panel        asdf     

new只能与Function一起用作操作数。

 new {} // Error: ({}) is not a constructor 

检查上下文中的Users类型:引发该exception时它不是 Function。

快乐的编码


alert(typeof(Users))应该做的伎俩。 结果应该是“function”以用作构造函数。 记下失败案例中的内容,并在下面查看原因。

一个有问题的场景(对于Users = new Users )可能是:一个对象是从Function Users构建的,然后对象(现在不是一个Function /构造函数)被分配回Users以便下一个new Users将去kaboom! (在showusersdashboard查看 – 这种行为真的有意吗?)

“正确”的代码可能是: var users = new Users; users.blahblah(...) var users = new Users; users.blahblah(...) ; 也就是说,使用新的局部变量, 不要覆盖全局用户变量/属性。


仅在“返回”到“#foobar”( 片段标识符 )时生成错误的原因是没有实际加载新页面,因此不重新加载JavaScript并且正在使用当前(现在已损坏的Users )。 KABOOM!

片段标识符的摘录:

如果目标元素位于当前文档中,则用户代理可以简单地聚焦目标元素而无需重新加载…

我认为它的语法错误

当我试图在我的函数中return anonymous object时,这发生在我身上

  var FalsEextension=false; ........ ........ return new { FalsEextension, LargeFile };// wrong Syntax 

并且正确的语法是

  return { FalsEextension, LargeFile }; 

你可以像这样使用它

 ObjectName.FalsEextension