lev*_*evi 29 javascript prototype
我在围绕这个功能时遇到了一些麻烦:
var toStr = Function.prototype.call.bind( Object.prototype.toString );
toStr([]) // [object Array]???????????????????????????
Run Code Online (Sandbox Code Playgroud)
该函数如何接受第2行中的参数?
Poi*_*nty 29
好,
Function.prototype.call引用"call"函数,该函数用于调用具有所选this值的函数;.bind引用Function原型上的"bind"函数(记住:"call"也是一个函数),它返回一个总是this设置为传入参数的新函数.this设置为"toString"函数.因此,结果就像这段代码:Object.prototype.toString.call( param ).然后,"console.log"调用将该函数传递给一个数组,然后就可以了.
编辑当"param"是一个对象时,注意Object.prototype.toString.call( param )就像param.toString()真的一样.当它不是时,那么"调用"函数的语义就是以JavaScript的正常方式将它变为一个(数字 - >数字,字符串 - >字符串等).
编辑,2016年5 月24日 - 上述最后一句话与ES2015不准确.当函数调用作为值时,新的JavaScript运行时不会 "autobox"原始类型this.
我假设你已经知道什么.call和.bind做
toStr 现在是一个基本上做的功能:
function toStr( obj ) {
return Function.prototype.call.call( Object.prototype.toString, obj );
}
Run Code Online (Sandbox Code Playgroud)
IE .call是.call函数的上下文参数设置的.toString函数.通常情况下,该部分已经被处理,因为您通常将.call某个函数的属性用作设置函数的上下文.call.
| 归档时间: |
|
| 查看次数: |
6420 次 |
| 最近记录: |