在JavaScript中,我想知道为什么我可以这样做:
[].slice.apply([1,2,3], [0, 2]) // returns [1, 2]
Run Code Online (Sandbox Code Playgroud)
据我所知,这相当于:
Array.prototype.slice.apply([1,2,3], [0, 2]); // returns [1, 2]
Run Code Online (Sandbox Code Playgroud)
但我不能这样做:
{}.hasOwnProperty.apply(a, ['a']);
Run Code Online (Sandbox Code Playgroud)
这将允许不输入这个长行:
Object.prototype.hasOwnProperty.apply(a, ['a']); // returns true or false
Run Code Online (Sandbox Code Playgroud)
好吧,当我在它的时候,我也看到我实际上可以做所有这些:
''.indexOf.apply('asdasd', ['s']); // returns 1
true.toString.apply(true); // returns // "true" as string
Run Code Online (Sandbox Code Playgroud)
与{}有什么关系?:-)为什么这么特别?
是hasOwnProperty('a')拼写错误?
{}.hasOwnProperty.apply(a, ['a']);
Run Code Online (Sandbox Code Playgroud)
但由于JavaScript解释为块分隔符,因此不太适用{}.只需添加括号:
({}).hasOwnProperty.apply(a, ['a']);
Run Code Online (Sandbox Code Playgroud)
核实:
> var a = {'a': 1}
Object
> {}.hasOwnProperty.apply(a, ['a']);
SyntaxError: Unexpected token .
> ({}).hasOwnProperty.apply(a, ['a']);
true
Run Code Online (Sandbox Code Playgroud)