私はいくつかのテストを行っていますがextend
、いくつかの観察を行った後、少し戸惑いました。最初の観察:
console.log($.extend === $.fn.extend); // trure
// and since $ === jQuery then ...
console.log(jQuery.extend === jQuery.fn.extend); // true
ここまでは順調ですね。上記の結果を考えると、私はこれを行うと考えました:
// SNIPPET 1
$.extend({
log: function(m) {
console.log(m);
}
});
この:
// SNIPPET 2
$.fn.extend({
log: function(m) {
console.log(m);
}
});
全く同じものでした。しかし、実際には、物事は非常に異なる方法で立っています。実際、SNIPPET 1 を実行してから次のようにすると:
$("body").log("whatever");
エラーが発生します (ログが定義されていません)。しかし、次のことができます。
$.log("whatever");
代わりに SNIPPET 2 を実行すると、反対の結果が得られます。つまり、次のようになります。
$("body").log("whatever"); // this will work
$.log("whatever"); // this won't
一体何?.extend
それが実行されるオブジェクトを拡張するという事実に感謝します( $
vs $.prototype
)が、私が得られないのは、それがどのように行われるかです! 特に次の事実を考えると:
$.extend === $.fn.extend // true
機能はそのまま!! どうすれば2つの異なる結果を生み出すことができますか?