如果我使用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
});
最适合这种方式的是什么?
答案 0 :(得分:3)
你应该使用extend。
请记住,修改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();