在underscore.js中,以下代码似乎添加了_.isNumber()
// Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.
each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
_['is' + name] = function(obj) {
return toString.call(obj) == '[object ' + name + ']';
};
});
但是必须有其他事情发生,因为将此代码直接复制到firefox会导致它失败,因为toString.call(5)
返回[xpconnect wrapped native prototype]
- 所以它显然在其他地方做了其他事情 - 但我不能弄清楚是什么。
以下是firefox中的结果示例:
答案 0 :(得分:4)
您的jsbin正在显示window.toString
,其中下划线正在使用Object.prototype.toString
,他们在代码中将其别名为toString
。
请参阅http://jsbin.com/uviyaz/3/edit
另见underscore's source他们在哪里:
// Create quick reference variables for speed access to core prototypes.
var slice = ArrayProto.slice,
unshift = ArrayProto.unshift,
toString = ObjProto.toString,
hasOwnProperty = ObjProto.hasOwnProperty;
答案 1 :(得分:0)
在下划线的代码中,toString
是一个局部变量,其值为Object.prototype.toString
。你认为它是一个全局函数 - 这就是你得到意想不到的结果的原因。
// Save bytes in the minified (but not gzipped) version:
var ArrayProto = Array.prototype,
ObjProto = Object.prototype,
FuncProto = Function.prototype;
// Create quick reference variables for speed access to core prototypes.
var push = ArrayProto.push,
slice = ArrayProto.slice,
unshift = ArrayProto.unshift,
toString = ObjProto.toString,
hasOwnProperty = ObjProto.hasOwnProperty;