[英]Is adding custom method to javascript document object considered to be bad
[英]Object method considered as string
我正在定义一个非常简单的对象,该对象应该计算数字1和2的总和:
function Calculator() {
this.number1 = 0;
this.number2 = 0;
this.sum = function() {
return this.number1 + this.number2;
}
}
var calculator = new Calculator();
calculator.number1 = 1;
calculator.number2 = 2;
console.log(calculator.sum);
但是,当我运行“ sum”方法时,控制台将返回:
function() {
return this.number1 + this.number2;
}
就像我的方法被认为是字符串一样,但是我不明白为什么...
你忘了打电话。 采用:
console.log(calculator.sum());
您的方法未视为字符串。 发生的情况是calculator.sum
是包含函数的变量。 记录它而不调用它只会返回它的主体。
首先, 不被 “视为”字符串: sum
被视为function 。 但是,由于您试图“转储”函数引用,并且只能转储文本,因此JavaScript需要询问该对象的字符串表示形式是什么。 该对象的字符串表示形式是函数的源。 所以基本上有:
console.log(calculator.sum);
拥有相同:
console.log(calculator.sum.toString());
这是因为log
需要转储字符串,并尝试将参数转换为可以显示的内容。 还请注意,此行为取决于您使用的控制台。 例如,火狐的web控制台返回[object Function]
(因为它使用Object.prototype.toString
代替的功能的一个),其中铬web控制台返回功能的toString
方法。
在您的情况下,您可能想调用该方法,因此您忘记了括号:
console.log(calculator.sum());
但是,因为当您尝试登录该不会有任何错误的原因calculator.sum
没有括号,这是因为JavaScript有一流的功能 。 这是非常强大的功能,使您能够像以前一样将函数作为其他函数的参数传递。 因此,例如,您可以拥有:
function log(thing) {
console.log(Object.prototype.toString.call(thing));
}
log(1);
log("something");
log(function foo() {});
当然,您也可以调用作为参数传递的函数:
function say(something) {
alert(something());
}
function hello() { return "Hello!" };
function bye() { return "Bye!" };
say(hello);
say(bye);
这些只是愚蠢的例子,只是为了给您一个想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.