Mic*_*bry 6 javascript backbone.js
我很好奇创建一个MVC javascript框架,以获得乐趣,并作为一种学习体验.
在backbone.js https://github.com/jashkenas/backbone/blob/master/backbone.js中,作者使用下划线的_.extend()方法来"扩展"骨干对象.
从Model我试图找出这个的好处开始.
// Attach all inheritable methods to the Model prototype.
_.extend(Model.prototype, Events, {});
Run Code Online (Sandbox Code Playgroud)
这是如何运作的?Model在此之前已经定义了,那么作者想要Copy all of the properties in the source objects over to the destination object http://underscorejs.org/#extend,他在里面创建了一大堆方法来与源模型作为原型进行交互?
为什么不呢
Backbone.Model.prototype.get = function() {
return 'Do Get';
}
Backbone.Model.prototype.set = function() {
return 'Do Set';
}
Run Code Online (Sandbox Code Playgroud)
或者更好的是使用Es6?以下是否与上述相同?
class Model extends Backbone {
get() {
return 'Do Get';
}
set() {
return 'Do Set';
}
}
Run Code Online (Sandbox Code Playgroud)
我是在正确的道路上,还是我在这里错过了一些东西?显然他在es6之前创造了这个东西,但我也很想知道它是否可以完成.
我的角度是抓住他的意图并重新创造这个概念,而没有下划线的依赖性.
_.extend是安全合并对象的经典方法。
我所说的安全是指第一个参数_.extend(obj1, obj2, ..., objN)将获取所有对象的所有可枚举属性,并在其后作为参数传递。
_.extend(Backbone.Model.prototype, {
get: function() {
return 'Do Get';
}
}
// Is an equivalent of
Backbone.Model.prototype.get = function() {
return 'Do Get';
}
Run Code Online (Sandbox Code Playgroud)
骨干事件
事件是一个可以混合到任何对象中的模块,使对象能够绑定和触发自定义命名事件。
换句话说,这个对象是一组用于自定义事件处理的方法。扩展的原因在下面的回答JS - Why use Prototype?Backbone.Model.prototype中有解释。
谈到 ES6,您必须记住,该class关键字仅引入了围绕构造函数的旧原型继承的语法糖。
// This will won't work, since you can't extend objects. It has to be a constructor.
class Model extends Backbone {
...
}
Run Code Online (Sandbox Code Playgroud)
我会更进一步说 Backbone 不能很好地与 ES6 类一起工作,请参阅为什么 Backbone.js 和 ES6 类不混合中了解更多内容。