2016-08-08 32 views
0

I definiert eine Basis und Klasse abgeleitet, beide definiert eine Funktion „getYear“ genannt:Eine seltsame Fehler nicht definierte Funktion in Javascript

function Base() {} 
Base.prototype.getYear = function() { 
    return 2015; 
} 

function Derived() { 
    year = 2016; 
} 
Derived.prototype = new Base(); 
Derived.prototype.getYear = function() { 
    return 2017; 
} 

var ins = new Derived(); 
console.log(ins.getYear()); 
console.log(ins.prototype.getYear()); 

Die letzte Anweisung wird ein Laufzeitfehler auslösen

Cannot read property 'getYear' of undefined 
sagen

Würdest du helfen, den Grund zu erklären? Ich denke, ich habe diese Funktion in beiden Basis/abgeleitete Funktion definiert.

Antwort

1

Die prototypes (Instanzmethoden) werden auf der Constructor deklariert und nur auf der instance verwendet. Wenn Sie den ursprünglichen Prototyp-Methode basiert auf der Instanz verwenden möchten, können Sie so etwas wie:

var ins = new Derived(); 
ins.constructor.prototype.getYear(); 

, wo Sie den getYear Prototyp aus dem ursprünglichen constructor erhalten. Dies vereitelt jedoch den Zweck, die Prototypen im Sinne der Instanz zu verwenden.

Hier Ihr Beispiel ist, überarbeitet zu tun, was Sie versuchten:

function Base() {} 
 
Base.prototype.getYear = function() { 
 
    return 2015; 
 
} 
 

 
function Derived() { 
 
    year = 2016; 
 
} 
 
Derived.prototype = new Base(); 
 
Derived.prototype.getYear = function() { 
 
    return 2017; 
 
} 
 

 
var ins = new Derived(); 
 
console.log(ins.getYear()); 
 
console.log(ins.constructor.prototype.getYear());