私はJavascriptを初めて使用しています。私はいくつかの目的指向プログラミングをしたとき、私はサブクラスでスーパークラスのコンストラクタを呼び出したい:`this`は` bind 'を使ってもスーパーコンストラクタのウィンドウになります
function P(p1, p2) {
alert(this);
this.v1 = p1;
this.v2 = p2;
}
var middleObj = function() {};
middleObj.prototype = P.prototype;
var C = function(p1, p2) {
P.bind(this, p1, p2);
P();
}
C.prototype = new middleObj();
C.prototype.constructor = C;
var objChild = new C(1,2);
alert(objChild instanceof P);
alert(objChild.v2);
私はC(中P()を直接)を呼び出すと、これはwindow
になり、私は理解することができますそれ。しかし、私がこれをC()に束縛しても、私はthis
の適切な値を得ることができません。その結果、v2が適切に初期化されていないため、2番目のアラートが未定義と表示されます。
を使用することをお勧めのように、あなたはそれを参照してくださいよ彼らは常に 'bind'の戻り値を使用します(そしてなぜそれらを説明します)。 –