8

私はいつも使っていて(typeof variable === "function")、偶然見つけてjQuery.isFunction()疑問に思っていました:

  1. typeof メソッドと jQuery のメソッドの違いは何ですか? 何が違うかだけでなく、
  2. typeof メソッドを使用するのが適切な場合と、jQuery のメソッドを使用するのが適切な場合はいつですか?
4

5 に答える 5

11

jQueryの使用が少し遅いことを除けば、ほとんど違いはありません。ソースコードを参照してください。

isFunction: function( obj ) {
    return jQuery.type(obj) === "function";
},

これは、別の関数を呼び出して、表示したものとまったく同じものを判別する関数を呼び出します:P

この場合、jQueryには文字通り利点がありません[またはその方法では、ライブラリのユースケースの90%]。Vanilla-JSを調べて、その機能のいくつかをチェックしてください:P

TLDR:これにはjQueryを使用しないでください...または何か。

アップデート

これは、Vanilla JSがjQueryよりも約93%高速であることを示すベンチマークです:http://jsperf.com/jquery-isfunction-vs-vanilla-is-function

于 2012-08-30T21:55:05.577 に答える
4

違いはありません。jQuery は同じ概念を使用します。

// ...
isFunction: function( obj ) {
    return jQuery.type(obj) === "function";
}

アップデート:

深く掘り下げた後、jQueryのメソッドがチェーンのメソッド onをstringisFunctionと比較していることがわかりました。これが、以前の例との違いであり、より遅い理由です。toStringObject.prototypefunction() {}[object Function]typeof

于 2012-08-30T21:53:33.943 に答える
2

isFunctionのjQueryソースコードは

isFunction: function( obj ) {
    return jQuery.type(obj) === "function";
},

type: function( obj ) {
return obj == null ?
   String( obj ) :
   class2type[ core_toString.call(obj) ] || "object";
},

//...

jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "),
   function(i, name) {
      class2type[ "[object " + name + "]" ] = name.toLowerCase();
});

core_toString = Object.prototype.toString,

したがって、引数jQuery.isFunctionを呼び出すとがが返される場合にのみtrueを返します。Object.prototype.toString.call[object Function]

于 2012-08-30T22:01:31.437 に答える
1

違いは、JQuery が次と同等のものを呼び出し、"Function" 文字列トークンをチェックすることです。

var toString = Object.prototype.toString;
var func = function(){};

console.log(toString.call(func)); // "returns [object Function]"

一方、typof は単に「関数」を返します。

var fType = typeof func; 

console.log(fType); // returns "function"

これが例です。

于 2012-08-30T22:03:46.913 に答える