Конструктор jQuery и init - PullRequest
10 голосов
/ 23 июня 2011

Если я выдаю

console.dir(jQuery.prototype)

, я получаю прекрасный список методов и свойств, которые есть в объекте jQuery.Но конструктор и init выделены красным, рядом с ними стоит небольшой знак плюса.

Q: Что отличает конструктор и init от других функций?

Ответы [ 3 ]

3 голосов
/ 23 июня 2011

Firebug проверяет, выглядит ли функция как функция класса (объект 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]));
}

Output

0: true
1: true
2: false
3: false
2 голосов
/ 23 июня 2011

Я думаю, это потому, что constructor и 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;

Другими словами: функция - это объект, это означает, что вы можете прикрепить любые свойства, которые хотите.

1 голос
/ 23 июня 2011

Это показывает, что эти функции имеют дополнительные свойства / методы, определенные для / установленные на них.

...