0

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

到目前为止我还没有找到解决方案,有什么想法吗?

我想实现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());
4

2 回答 2

3

扩展 Object.prototype 扩展了所有对象,因此如果您修改所有对象的原型,您可以阻止它们所需的行为,这就是为什么应该避免直接修改为对象原型的原因。更好的做法是扩展自定义函数原型,以确保不会破坏其他原型,即由 jQuery 等框架提供。甚至表示 DOMElements 的对象也会被修改,这通常是一个坏主意。

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

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

于 2012-09-05T14:20:40.940 回答
0

我无法重现这个东西..它工作正常检查这个 代码很简单像这样

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

​</p>

于 2012-09-05T14:30:47.033 回答