我正在做一些测试,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
功能是一样的!!它如何产生两种不同的结果?