javascript - 分配给 {}.toString 是什么意思?

标签 javascript function tostring

我正在学习 JavaScript,我看到了这个演示类型检测的片段:

var toClass = {}.toString // Copy a reference to toString for objects into toClass variable

alert( toClass.call( [1,2] ) ) // [object Array]
alert( toClass.call( new Date ) ) // [object Date]

我不明白第一行的空大括号是干什么用的,所以我这样删除它们:

var toClass = toString

代码仍然有效。 但是在下面的代码中,

function getAge () {
    alert(this.age);
}

var p1 = {
    age:1
};

var tellAge=getAge;
tellAge.call(p1); //1

如果我将 var tellAge=getAge 更改为 var tellAge={}.getAge,我会得到一个错误:无法读取未定义的属性“调用”。 为什么是这样?是因为toString是内置函数吗?

最佳答案

Is it because toString is a built-in function

不完全是,因为javascript中的Objectwindow都有一个toString方法。


{}.toString 中的 {} 表示 javascript 中的新对象。对象有一个 toString 方法,这就是您要创建的引用。

如果您省略 {},它等同于 window.toString,幸运的是 window 对象本身有一个 toString 方法。所以一切都继续工作。

当您执行 {}.getAge 时,您是在告诉解释器从 Object 获取 getAge 方法,该方法不存在,设置 tellAge等于undefined,导致错误cannot read property "call"of undefined

关于javascript - 分配给 {}.toString 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612093/

相关文章:

javascript - 如何使函数 (f1) 运行单独的函数 (f2),但 f2 使用 "this"参数?

c++ - "number>>1"中的 "binary(number >> 1)"是什么意思(十进制转二进制)

C# XMLElement.OuterXML 在一行而不是格式

c# - tostring ("000.0") 生成错误值

C++ toString() 和 sprintf()

javascript - 如何在传单中投影像素坐标?

javascript - 在揭示模块模式中使用自执行匿名函数

c - 如何使用指向切片字符串的指针的指针

javascript - 为什么嵌套在标签中的 Span 会阻止其他嵌套项目单击以选择复选框?

class - 需要有关 Matlab 多类分类器的帮助