我正在学习 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中的Object
和window
都有一个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/