Я не совсем уверен, в чем вопрос, но я сделаю все возможное, чтобы ответить на то, что я думаю, вы спрашиваете.
ключевое слово new
используется для создания экземпляра нового объекта, возвращаемого функцией, определенной свойством init
в прототипе функции.
Я считаю, что код написан таким образом, что ключевое слово new
не требуется каждый раз, когда вы создаете экземпляр нового объекта jQuery , а также делегируете логику, лежащую в основе конструкции объекта, прототипу. Первое, что я считаю, - сделать библиотеку чище для использования, а второе - сохранить логику инициализации в одном месте и позволить рекурсивно вызывать init
для создания и возврата объекта, который правильно соответствует переданному аргументы.
Ваш второй блок кода не возвращает объект. Попробуйте в Firebug с
var myClass1 = myClass(1,2);
console.log(myClass1);
вы получаете this.init is not a function
ошибку. Единственный способ, которым это будет работать, - это использовать ключевое слово new
, как в
var myClass1 = new myClass(1,2);
console.log(myClass1);
Сравните это с кодом, похожим на код в jQuery
myClass = window.myClass = function(x, y)
{
return new myClass.fn.init(x, y);
};
myClass.fn = myClass.prototype =
{
init: function(x, y)
{
this.x = x;
this.y = y;
}
};
var myClass1 = myClass(1,2);
console.log(myClass1);
var myClass2 = new myClass(1,2);
console.log(myClass2);
В каждом случае вы правильно получаете объект, возвращаемый со свойством x
со значением 1 и со свойством y
со значением 2, независимо от того, используется ключевое слово new
или нет.