javascript对象原型与jquery冲突?

时间:2012-09-05 13:45:16

标签: javascript jquery object prototypal-inheritance

我正在尝试实施here提供的解决方案,但显然与jquery冲突,如ticket中所述。

到目前为止,我找不到解决方案,任何想法?

我想实现Shelby Moore提出的继承机制

这可能是导致问题的原因,扩展了Object原型:

Object.prototype.Inherits = function(parent)
{
    if(arguments.length > 1)
    {
        parent.apply(this, Array.prototype.slice.call(arguments, 1));
    }
    else
    {
        parent.call(this);
    }
}

编辑1 :经过广泛阅读后,我采用了以下模式:

NewFunction.prototype = Object.create(new FunctionToInheritFrom());

2 个答案:

答案 0 :(得分:3)

扩展Object.prototype扩展了所有对象,所以如果你修改了所有对象的原型,你可以制止他们想要的行为,这就是为什么人们应该避免直接修改为Object原型。更好的做法是扩展自定义函数原型,确保不会制动其他原型,即由jQuery等框架提供。即使是代表DOMElements的对象也会被修改,这通常是一个坏主意。

尽管如此,我想提一下Javascript本身并没有定义真正的继承,试图解决这个问题会导致很多问题,并使开发变得更加困难。 Javascript中的继承是基于原型的继承,它与真正的继承不同,面对这一事实,并且使用Javascripts自己的方法进行“类似继承”(即描述为here)是直截了当的,并且工作得非常好。

对我来说,Javascript继承更像是合并对象成员,关于这一点的非常好的文章是this one of douglas crockford,我认为值得一读。

答案 1 :(得分:0)

我无法复制这个东西..它的工作正常check this 代码很简单,就像这样

Object.prototype.Inherits = function(parent)
{
    if(arguments.length > 1)
    {
        parent.apply(this, Array.prototype.slice.call(arguments, 1));
    }
    else
    {
        parent.call(this);
    }
}
    $(document).ready(function(){
        $('input').click(function(){
     alert();
     });
    });