Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance 主干视图继承-调用父级导致递归_Inheritance_Backbone.js_Backbone Views - Fatal编程技术网

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);          
  }
});