4

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での結果の例を次に示します。

http://jsbin.com/uviyaz/2/edit

4

2 に答える 2

4

jsbinが表示window.toStringされていますが、アンダースコアが使用されているため、コード内でローカルにObject.prototype.toStringエイリアスされています。toString

http://jsbin.com/uviyaz/3/editを参照してください

アンダースコアのソースも参照してください。

  // Create quick reference variables for speed access to core prototypes.
  var slice            = ArrayProto.slice,
      unshift          = ArrayProto.unshift,
      toString         = ObjProto.toString,
      hasOwnProperty   = ObjProto.hasOwnProperty;
于 2012-07-31T15:39:47.357 に答える
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;
于 2012-07-31T15:40:17.037 に答える