Javascript 将函数转换为其字符串表示形式
我知道在函数对象上调用Javascript 将函数转换为其字符串表示形式,javascript,angularjs,ecmascript-6,Javascript,Angularjs,Ecmascript 6,我知道在函数对象上调用toString,会得到函数定义的字符串表示,如: 函数foo(){/*…*/}.toString()对我来说很好 但是 我看到作者在很多地方都使用了这种模式,其背后的原因可能是什么?绕过funcName.toString=function(){return“not what you expected”}@AlexK。你是说有人可能会对函数定义进行monkey路径修改?是的,对重写toString.t.w没有任何限制,这不是monkey补丁。事实上,这种方法依赖的不是猴子补
toString
,会得到函数定义的字符串表示,如:
函数foo(){/*…*/}.toString()代码>对我来说很好
但是
我看到作者在很多地方都使用了这种模式,其背后的原因可能是什么?绕过funcName.toString=function(){return“not what you expected”}
@AlexK。你是说有人可能会对函数定义进行monkey路径修改?是的,对重写toString.t.w没有任何限制,这不是monkey补丁。事实上,这种方法依赖的不是猴子补丁。这种方法可以防止意外地创建/重写toString
属性到fn
对象。e、 g.fn.toString=1
然后调用fn.toString()
将抛出未捕获类型错误的错误:fooFn.toString不是函数(…)
。。。
function stringifyFn(fn) {
// Support: Chrome 50-51 only
// Creating a new string by adding `' '` at the end, to hack around some bug in Chrome v50/51
// (See https://github.com/angular/angular.js/issues/14487.)
// TODO (gkalpak): Remove workaround when Chrome v52 is released
return Function.prototype.toString.call(fn) + ' ';
}