0

Javascript の継承は原型的であると読みましたが、それはどういう意味ですか?プログラマによって定義されたオブジェクトは、window などの事前定義されたオブジェクトのプロパティをどのように継承できますか? たとえば、自分のクラスに関数 eval() が必要です。どうすれば達成できますか?

4

3 に答える 3

3

から継承する必要があるかどうかという問題はさておき、これを行う方法windowを示す簡単な例を次に示します。

function Test() {
    // constructor code
}

Test.prototype = window;

var t = new Test();
t.eval();

new演算子を使用して呼び出されると、関数は、プロトタイプがオブジェクトにリンクされているTest新しいインスタンスを作成します。関数のプロトタイプは、任意のオブジェクトにすることができます。Testwindow

于 2011-07-19T14:51:34.157 に答える
1

newヒント:オブジェクトの宣言には使用しないでください。Object.createは、JavaScriptオブジェクトを作成するための適切な方法です。最新のすべてのブラウザでサポートされています。他のブラウザの場合、この記事の下部に素敵なシムがあります。

http://javascript.crockford.com/prototypal.html

'new'を使用するコンストラクターの問題の1つは、誤って通常の関数のように呼び出すと、変数を使用してグローバル変数(つまり、ブラウザーの場合はウィンドウ)に変更が加えられるため、プロトタイプ関数専用に予約する必要があることですthis。代わりにthis使用することを好みますthatthis

new obj()私は個人的に、、、obj()およびをサポートするスタイルを使用していますobj.init()。これは、1つの追加の関数ポインターである可能性がありますが、セマンティックな意味を追加すると思います。

function obj(){
    var that = Object.create(obj.prototype)
    //any constructor logic goes here
    return that
}
obj.prototype = Object.create(Superclass.prototype)

obj.init = obj //completely optional

//other function declarations

obj.prototype.someFunction = function(){
    //logic for someFunction
}
于 2011-07-19T15:25:18.427 に答える
0

あなたは正確に何を達成したいですか?プロトタイプ継承の最も簡単な方法 (最善ではない) を次に示します。

var obj1=new Object1Constructor();
var obj2=new Object2Constructor();

obj2.prototype=obj1;

obj1のすべてのプロパティを継承することを意味します。obj2

主なことを忘れてしまいました: eval==evil;

更新: 上記のコードで間違いを犯しました。それは継承ではありません。更新されたコードは次のとおりです。

var Object1Constructor=function(){ // one object constuctor
    //properties definition goes here
}

var Object2Constructor=function(){ // another object constuctor
    //properties definition goes here
}

Object2Constructor.prototype=new Object1Constructor();

var obj=new Object2Constructor();

そして、それが継承です。objプロパティがObject2Constructorandで定義されるようになりましたObject1Constructor- 親の「クラス」。以下のCMSのコメントを参照してください。彼は完全に正しいです。

于 2011-07-19T14:52:51.380 に答える