jQuery构造函数和init

时间:2011-06-22 22:16:45

标签: javascript jquery firebug

如果我发出

console.dir(jQuery.prototype)

我得到了一个jQuery对象中的方法和属性的漂亮列表。但构造函数和init是红色的,旁边有一个小加号。

问:构造函数和init与其他函数的不同之处是什么?

3 个答案:

答案 0 :(得分:3)

Firebug检查函数是否类似于Class函数(obj.prototype包含至少1个属性),并将其显示为具有可扩展属性的类。

http://code.google.com/p/fbug/source/browse/branches/firebug1.8/content/firebug/dom/domPanel.js#531

 if (isClassFunction(val))
    this.addMember(object, "userClass", userClasses, name, val, level, 0, context);

http://code.google.com/p/fbug/source/browse/branches/firebug1.8/content/firebug/dom/domPanel.js#1960

function isClassFunction(fn)
{
    try
    {
        for (var name in fn.prototype)
            return true;
    } catch (exc) {}
    return false;
}

你可以在Firebug中运行它来测试它

function isClassFunction(fn)
{
    try
    {
        for (var name in fn.prototype)
            return true;
    } catch (exc) {}
    return false;
}
test = [jQuery.prototype.init, jQuery.prototype.constructor, jQuery.prototype.each, jQuery.prototype.get];
for(var i = 0; i < test.length; i++) {
    console.log("" + i + ": " + isClassFunction(test[i]));
}

输出

0: true
1: true
2: false
3: false

答案 1 :(得分:2)

我想这是因为构造函数和init不仅仅是“纯粹的”函数。这意味着它们具有其他属性(例如init具有自己的原型),这就是它们可扩展的原因。为了进一步说明这一点:

// size is defined as something like this
jQuery.prototype.size = function() {
    // do stuff
};
// init is defined as a function too, but with additional properties
jQuery.prototype.init = function() {
    // do other stuff
};
jQuery.prototype.init.functionIsAnObject = true;

换句话说:一个函数是一个Object,这意味着你可以附加你想要的任何属性。

答案 2 :(得分:1)

它表明这些函数具有为其设置/设置的附加属性/方法。