0

ここで提供されているソリューションを実装しようとしていますが、このチケットで説明されているように、明らかにjqueryと競合しています。

これまでのところ、解決策は見つかりませんでした。何かアイデアはありますか?

ShelbyMooreが提案した継承メカニズムを実装したい

これが問題の原因である可能性があり、オブジェクトプロトタイプを拡張します。

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を拡張すると、すべてのオブジェクトが拡張されるため、すべてのオブジェクトのプロトタイプを変更すると、目的の動作にブレーキをかけることができます。そのため、Objectプロトタイプに直接変更することは避けてください。カスタム関数のプロトタイプを拡張して、他のプロトタイプ、つまりjQueryなどのフレームワークによって提供されるプロトタイプにブレーキをかけないようにすることをお勧めします。DOMElementsを表すオブジェクトでさえ、一般的に悪い考えであるように変更されます。

それでも、Javascript自体は実際の継承を定義しておらず、これを回避しようとすると多くの問題が発生し、開発がより困難になります。Javascriptの継承はプロトタイプベースの継承であり、実際の継承とは異なり、この事実に直面し、Javascript独自のメソッドを使用して「継承のようなもの」(つまり、ここで説明)を使用するのは簡単で、非常にうまく機能します。

私にとって、Javascriptの継承は、オブジェクトメンバーをマージするようなものであり、これに関する非常に優れた記事は、ダグラスクロックフォードの記事です。読む価値があると思います。

于 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 に答える