分配给{} .toString意味着什么?

Yib*_*ang 5 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]
Run Code Online (Sandbox Code Playgroud)

我不明白第一行中的空花括号是什么,所以我将它们删除如下:

var toClass = toString
Run Code Online (Sandbox Code Playgroud)

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

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

var p1 = {
    age:1
};

var tellAge=getAge;
tellAge.call(p1); //1
Run Code Online (Sandbox Code Playgroud)

如果我var tellAge=getAge改为var tellAge={}.getAge,我得到一个错误:无法读取未定义的属性"调用".为什么是这样?是因为toString是内置功能吗?

Jam*_*iec 7

是因为toString是一个内置函数

不完全是,因为两者Objectwindowjavascript都有一个toString方法.


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

如果省略{}它,它就等同window.toString于幸运,window对象本身就有一个toString方法.所以一切都继续有效.

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