我正在尝试实施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());
答案 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();
});
});