Inheritance 主干视图继承-调用父级导致递归
我有三个主干视图类继承:Inheritance 主干视图继承-调用父级导致递归,inheritance,backbone.js,backbone-views,Inheritance,Backbone.js,Backbone Views,我有三个主干视图类继承: var preventRecursion = 0; var parentView = Backbone.View.extend({ initialize: function(){ console.log('parentView'); } }); var nestedChildView = parentView.extend({ initialize: function(){ if (++preventRecursion == 5)
var preventRecursion = 0;
var parentView = Backbone.View.extend({
initialize: function(){
console.log('parentView');
}
});
var nestedChildView = parentView.extend({
initialize: function(){
if (++preventRecursion == 5) {throw "Recursion"};
console.log('nestedChildView');
this.constructor.__super__.initialize.apply(this);
}
});
var nestedNestedChildView = nestedChildView.extend({
initialize: function(){
console.log('nestedNestedChildView');
this.constructor.__super__.initialize.apply(this);
}
});
当我尝试创建NestedChildView时:
var t = new nestedNestedChildView();
我得到无限递归:
以下是如
关于super的简要说明:JavaScript不提供简单的调用方法
super-原型上定义的同名函数
链条如果重写了核心函数(如set、save)并希望
要调用父对象的实现,您必须
按照以下思路明确地称之为:
在类层次结构中,this.constructor
始终等于nestedNestedChildView
的构造函数,这意味着this.constructor.\uuuuu super\uuuuu.initialize
将是nestedChildView.initialize
,因此是一个循环。请参阅以进行测试
您可以显式地调用类
或者调用原型链上的方法(如果愿意)():
有关此主题的更多信息,请参阅和
var nestedChildView = parentView.extend({
initialize: function(){
console.log('nestedChildView');
nestedChildView.__super__.initialize.apply(this);
}
});
var nestedNestedChildView = nestedChildView.extend({
initialize: function(){
console.log('nestedNestedChildView');
nestedNestedChildView.__super__.initialize.apply(this);
}
});
var nestedChildView = parentView.extend({
initialize: function(){
console.log('nestedChildView');
parentView.prototype.initialize.apply(this);
}
});
var nestedNestedChildView = nestedChildView.extend({
initialize: function(){
console.log('nestedNestedChildView');
nestedChildView.prototype.initialize.apply(this);
}
});