为什么要返回'这'在导致循环的JavaScript原型中
Why is returning 'this' in a JavaScript prototype causing a loop
所以我有一个超级简单的JS对象,我一直在摆弄它,但我发现了一些我无法理解的东西。当我运行这个程序时,obj.toString会被反复调用,直到我收到"最大调用堆栈大小错误"。但是,如果我将obj.type返回中的"this"替换为"this.name",则一切正常。我意识到我通常不会只返回"this",但为什么我这样做时它会陷入循环?
var Dog = function(name){
this.name = name;
}
Dog.prototype.type = function(){
return this;
}
Dog.prototype.toString = function(){
//console.log(this.type())
return "Dog's name: " + this.type();
}
var spot = new Dog('spot');
console.log(spot.toString());
在javascript中字符串化对象时,会调用toString()函数。
在这种情况下,您有一个自定义的toString()函数。凉的
让我们追踪一下:
console.log(spot.toString())
return "Dog's name: " + this.type();
return this;
// Hmmmm. How do we add "this" to our string. Easy we call toString().
return "Dog's name: " + this.type();
return this;
// Hmmmm. How do we add "this" to our string. Easy we call toString().
return "Dog's name: " + this.type();
return this;
哦。。。。
我认为toString
方法中的返回语句应该是return "Dog's name: " + this.name;
。
var Dog = function(name){
this.name = name;
}
Dog.prototype.type = function(){
return this;
}
Dog.prototype.getName = function(){
//console.log(this.type())
return "Dog's name: " + this.type(); // <- Calls toString method
}
Dog.prototype.toString = function(){
return this.name;
};
var spot = new Dog('spot');
console.log(spot.getName());
相关文章:
- 控制器不会进入for循环:javascript
- 使用来自不同循环Javascript的数据创建数组
- 在for循环-Javascript中创建新对象
- 日期循环 Javascript
- 在循环 javascript 内部创建一个数组
- 使用 for 循环 JavaScript 的打印范围
- 使用RegExp循环数组而不是for循环(Javascript)
- 如何避免循环Javascript
- 如何停止循环 - Javascript 100%
- 我想让我的程序重新运行开头,有点像循环 JavaScript
- css转换在for循环javascript中无法正常工作
- 在for循环javascript中创建对象
- do/while语句中的if-elseif语句无限循环javascript
- 在for循环Javascript中对数字进行分类和计数
- 如何一次运行一次循环javascript
- 请,需要帮助循环Javascript事件
- 在递归循环javascript之后,为JSON键变量使用自定义HTML元素
- 嵌套循环javascript棋盘
- 如何重新启动循环javascript循环
- 在循环 JavaScript 之后刷新页面