对象调用导致无休止的递归

时间:2015-04-12 18:17:09

标签: javascript recursion

我可能需要你的帮助。目前我正在尝试理解JavaScript如何处理类和对象。所以我写了一个小例子:

function aClass(test, something_else){
    this.string1 = "I'am just a class !";
    this.string2 = "";
    this.methode1 = function(){
        console.log("Greetings :)");
        this.constructor("Called from method1","Pretty nice or ?");
    };
    console.log("Line 8 !");
    this.methode1();
    this.constructor = function(input1, input2){
        console.log("Method 2 was called !\n"+ input1 +"\n"+ input2);
    };
    this.constructor(test, something_else);
}

var object_contianer1 = new aClass("You");
object_contianer1.methode1();

但是第9行(this.methode1();)中的调用似乎导致无休止的递归,我不确定为什么。如果我删除这一行,第13行(this.constructor(test, something_else);)不会产生这种递归,所以我想知道原因是什么。

我希望你们中的一个能向我解释。

1 个答案:

答案 0 :(得分:2)

new aClass()使用构造函数aClass创建一个新对象。在该函数调用中,this.constructor引用aClass本身。

因此:

function aClass() {
  this.constructor();
}

直接等效于此,这显然会产生无限循环:

function aClass() {
  aClass();
}

请注意,这仅在您致电new aClass()时适用,因为newthis设置为“正在创建的对象”。

如果您在没有aClass()的情况下致电newthis将成为浏览器中的顶级对象(Window)。这也会失败,这次是TypeError,因为拨打Window是不合法的。