我尝试创建一些基于类的jQuery风格,如下面的代码。为什么jQuery使用“new jQuery.fn.init()”来创建jQuery对象,但我不能?
myClass = window.myClass = function(x, y)
{
return new myClass.fn.init(x, y);
};
myClass.fn = myClass.prototype =
{
init: function(x, y)
{
// logic for creating new myClass object.
}
};
我不明白为什么jQuery的使用new关键字,因为从我的实验创建它的类,JavaScript的始终创建myClass.init对象,而不是MyClass的对象。但是,我尝试删除myClass构造函数中的新关键字。但它仍然没有改变。你能解释为什么jQuery可以做到这一点,但我不能或给我一些代码在init函数中使用?
顺便说一句,我可以使用下面的代码而不是jQuery样式代码来创建相同的对象。我的代码& jQuery代码有什么不同?使用jQuery风格有什么好处吗?
myClass = window.myClass = function(x, y)
{
this.init(x, y);
};
myClass.fn = myClass.prototype =
{
init: function(x, y)
{
this.x = x;
this.y = y;
}
};
PS。我喜欢将初始逻辑分解为函数的编写代码,因为使用我的代码的其他人(如我的下面的代码)很容易覆盖此函数。
// override init function of myClass
myClass.fn._old_init = myClass.fn.init;
myClass.fn.init = function()
{
// logic for doing something before init
this._old_init();
// logic for doing something after init
};
感谢,
,因为我刚刚发现,jQuery的使用这个语句(jQuery.fn.init.prototype = jQuery.fn)给了init函数jQuery的原型后实例你的回答是真实的。然而,你的回答和你的例子并没有解决我的问题,为什么jQuery使用这种风格来创建jQuery对象。 – 2009-12-07 07:37:15
jQuery可能使用这种技术将构造函数与通用包装函数('jQuery()')分开。他们可以做到这一点,这可能是一个很早就在jQuery开发中做出的决定,并没有改变,因为它似乎有效地工作...... – James 2009-12-07 09:57:16
@JP - 同意这可能是对早期决定的回忆 – 2009-12-07 17:54:13