我有一些相关的主干观点:
首先:
App.Views.TreeGrowthBase = App.Views.TreeGrowthBase.extend({
events: {
'submit form': 'submitForm',
...
然后在同一个文件中:
submitForm: function(e) {
e.preventDefault();
和app中的其他地方:
App.Views.WineTreeGrowthBase = App.Views.TreeGrowthBase.extend({
submitForm(event) {
event.preventDefault();
我的问题:在最后一段代码中......语法是什么:
submitForm(event) {
event.preventDefault();
这是方法调用吗?定义方法?冒号在哪里?
哪一个优先?我想象子视图的submitForm
方法定义发生了...如果是方法定义?
答案 0 :(得分:4)
submitForm(event) {
event.preventDefault();
这是ES6中的方法定义简写(ECMAScript 2015)。
它相当于
submitForm: function submitForm(event) {
event.preventDefault();
简写语法使用命名函数而不是匿名函数 函数(如
foo: function() {}
)。可以调用命名函数 来自函数体(匿名函数不可能这样) 没有标识符可供参考)。有关详细信息,请参阅function。
并在具有新功能的浏览器中工作(与IE不同)。
在Backbone类的子级中重写的任何方法(extend
函数的结果)优先于父函数。如果您想调用父函数,它仍然可能:
submitForm: function(event) {
// Using the Backbone '__super__'
ThisClass.__super__.submitForm.apply(this, arguments);
// Or the JavaScript preferred way
ParentClass.prototype.submitForm.apply(this, arguments);
event.preventDefault();
}
这不是Backbone特有的。这是原型链的正常行为。 Backbone只是简单地将复杂性包含在一个简单的extend
function中。
有关详细信息,请参阅此in-depth answer。
不要使用this.constructor.__super__
,因为它不能保证是实际的类,它可能是子类的构造函数,导致调用堆栈溢出 。赞成MyCurrentClass.__super__
,它是明确的,并且可以解决潜在的延伸问题。