2017-08-19 1 views
-1

Ich bin neu in Javascript. Wenn ich eine zielorientierte Programmierung habe, möchte ich Konstruktor der Superklasse in einer Unterklasse aufzurufen:`this` wird Fenster in Super-Konstruktor sogar mit` 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); 

Wenn ich rufe P() direkt in C(), dies wird zu window, und ich kann verstehen, Das. Aber selbst wenn ich dies an C() anbinde, kann ich immer noch nicht den richtigen Wert von this bekommen. Daher wird die zweite Warnung undefiniert angezeigt, da v2 nicht ordnungsgemäß initialisiert wird.

+0

Wenn Sie mehr genau hinsehen, um die Antworten in der verknüpften dupetarget, sehen Sie, dass Sie verwenden immer den Rückgabewert von 'bind' (und erklären warum). –

Antwort

1

P.bind() wird eine Funktion zurückgeben, die Sie erneut Ihrem P zuweisen müssen. Wie dies

P = P.bind(this, p1, p2) 

Aber in diesem Fall empfehle ich Ihnen nur verwenden P.call(this, p1, p2);

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.call(this, p1, p2); 
 
} 
 
C.prototype = new middleObj(); 
 
C.prototype.constructor = C; 
 

 
var objChild = new C(1,2); 
 
alert(objChild instanceof P); 
 
alert(objChild.v2);

+0

Danke für die Klärung. Es ist gelöst –

Verwandte Themen