2

如果我使用 Require.js 来管理带有 Backbone.js(也有下划线)的项目中的模块,那么在扩展模块时我可以做这样的事情

require(['Home'], function(home) {

    'use strict';

    var view = home.View.prototype;

    _.extend(view,{

        anotherTitle: 'Welcome Jean Luc Picard';

    });
});    

或者

require(['Home'], function(home) {

    'use strict';

    var view = home.View.prototype;

        view.anotherTitle= 'Welcome Jean Luc Picard'; //this is a new attribute

});    

最合适的方法是什么?

4

1 回答 1

3

你应该使用扩展。

请记住,修改 Backbone 类型的原型(这是我假设home.View的)将为所有消费者扩展/修改该原型,这可能是意外行为。即使在使用 require 时,您也可以直接修改这些依赖项并影响后续的 require 调用(发生这种情况是因为您正在修改 require 缓存中的依赖项,因此不需要发生对同一依赖项的后续请求)。

使用.extend()是创建您自己的扩展/自定义类型的最佳方式。在幕后,extend()实际上确实修改了原型,但它是创建的新对象类型的原型,并有效地使用了主干类型作为超级。

因此,要创建自己的类型:

// Create a new object whose prototype is the combination of Backbone.View 
// and the object passed to extend
var MyCustomView = Backbone.View.extend({ ... });
var instance = new MyCustomView();

但是,如果home.View已经是自定义视图类型,则它在功能上可能等同于.extend对其进行操作或手动将内容添加到原型中。但是,为了一致性和清晰起见,您应该始终使用方便的花花公子extend method来创建子类型。

var MySubCustomView = MyCustomView.extend({ ... });
var instance = new MySubCustomView();
于 2013-10-31T18:31:52.563 回答