我可能需要你的帮助。目前我正在尝试理解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);
)不会产生这种递归,所以我想知道原因是什么。
我希望你们中的一个能向我解释。
答案 0 :(得分:2)
new aClass()
使用构造函数aClass
创建一个新对象。在该函数调用中,this.constructor
引用aClass
本身。
因此:
function aClass() {
this.constructor();
}
直接等效于此,这显然会产生无限循环:
function aClass() {
aClass();
}
请注意,这仅在您致电new aClass()
时适用,因为new
将this
设置为“正在创建的对象”。
如果您在没有aClass()
的情况下致电new
,this
将成为浏览器中的顶级对象(Window
)。这也会失败,这次是TypeError
,因为拨打Window
是不合法的。