繁体   English   中英

对象方法视为字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM