为什么new关键字没有创建Router类的唯一实例?

Why does the new keyword not create a unique instance of the Router class?

本文关键字:唯一 实例 Router 创建 new 关键字 为什么      更新时间:2023-09-26

在这个例子中,为什么new关键字没有创建Router类的唯一实例?你可以看到,我的简单路由器有一个$deferred属性,它被解析了,但即使在创建新类并再次测试状态时,它仍然被解析,而不是在创建新类时重置为"pending"。

var Router = Backbone.Router.extend({
    $deferred: new $.Deferred(),
    initialize: function () {
    }
});
var router1 = new Router({});
$("#results").append(router1.$deferred.state() + "<br>");  //pending
router1.$deferred.resolve();
$("#results").append(router1.$deferred.state() + "<br>"); // resolved
var router2 = new Router({});
$("#results").append(router2.$deferred.state() + "<br>"); //resolved -- should be pending
router2.$deferred.resolve();
$("#results").append(router2.$deferred.state() + "<br>"); //resolved
http://jsfiddle.net/Nv7ep/

这是一个更新的小提琴:http://jsfiddle.net/phoenecke/Nv7ep/1/

var Router = Backbone.Router.extend({
    initialize: function () {
        // add the deferred object to the new instance.
        this.$deferred = new $.Deferred();
    }
});

当您添加属性时,在extend中,它被添加到原型中,因此$deferred被所有实例共享。如果你想为路由器的每个实例提供一个唯一的延迟实例,你应该在initialize中添加它。