为什么jQuery core.js不是用原型定义的扩展

时间:2012-01-19 15:18:56

标签: javascript jquery prototype

为什么jQuery core.js不是extend定义如下:

jQuery.extend = jQuery.fn.extend = function() {
    ...
}

而不是原型如:

jQuery.prototype.extend = jQuery.fn.prototype.extend = function() {
    ...
}

据推测,使用前者,从jQuery创建的对象将不具有扩展功能。

2 个答案:

答案 0 :(得分:4)

因为jQuery.fn === jQuery.prototype

它是在原型上定义的。 jQuery刚刚决定将原型别名为.fn

是“可爱的”

这就是为什么

$().extend({ 
    "lulz": "baz" 
}, { 
    "more-lulz": "no wai" 
})["more-lulz"] === "no wai"; // true

答案 1 :(得分:2)

好吧,因为fn不是prototype属性的快捷方式:

console.log($.prototype === $.fn);

也许John Resig厌倦了为每个方法输入prototype并设置了一个漂亮的别名fn(这确实更短,在我看来更具启发性)。