2012-09-05 103 views
0

我试图实现提供here的解决方案,但显然与jQuery的冲突的如本ticket描述。JavaScript对象与jquery冲突的原型?

到目前为止,我dind't找到一个解决方案,任何想法?

我想要实现由谢尔比·摩尔提出的继承机制

这可能是问题的原因,扩展对象原型:

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()); 

回答

3

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

不过我想提的是一个和Javascript本身并没有定义真正的继承和试图解决这导致了很多问题,使之更难以发展。在Javascript继承是基于原型继承,这是真正的继承不同,面对这一事实,并使用的Javascript自己的方法来“像继承”(即描述here)是直线前进,而且运作非常良好。

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

+0

+1提的是,* JavaScript是不是一个经典的面向对象的语言*。学习和热爱语言的做事方式,而不是试图强加一种不匹配的模式。 – josh3736

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(); 
    }); 
    });