Zunächst einmal müssen Sie, dass berücksichtigen:
function inherit(a, b)
{
// none of these work
//a.prototype = b;
//a.prototype = b();
//a.prototype = new b();
//a.prototype = Object.create(b.prototype);
//a.prototype = Object.create(b);
//a.prototype = b.prototype;
}
ist eine Beziehung von Klasse zu Klasse. Die Vererbung ist Klasse zu Klasse und Sie verwenden fälschlicherweise ein Objekt in diesem Bereich versucht zu sagen: „Hey Objekt versuchen, die Klasse Verhalten zu erben“ Können Sie den Fehler hier sehen?
Außerdem haben Sie erste Änderung die Beziehung zwischen diesen Klassen vor die neue object.Therefore instanziiert, sollte der Code sein:
function inherit(a, b)
{
// just this one works:
a.prototype = new b();
// none of these work
//a.prototype = b;
// a.prototype = b();
// a.prototype = Object.create(b.prototype);
// a.prototype = Object.create(b);
// a.prototype = b.prototype;
}
function test1()
{
this.val1 = 123;
this.print = function() {
console.log ("life sucks!");
}
}
function test2()
{
this.val2 = 456;
}
//First you have to set the relation
inherit(test2, test1);
//After that you can create your object
var testInstance = new test2();
console.log(testInstance.val2);
console.log(testInstance.val1);
console.log(testInstance.print);
Schließlich sollten Sie gefragt haben! Warum kann ich in diesen Fällen die Funktion object.create nicht für die Vererbung verwenden? Das liegt daran, dass Sie den Feldern (Variablen) streng festgelegte Werte zugewiesen haben und Sie dafür das Schlüsselwort "new" verwenden müssen.
Die Konstruktorfunktionen bisher gezeigt (Object.create, b.prototype etc) Sie Eigenschaftswerte nicht angeben lassen, wenn Sie eine Instanz erstellen. Wie bei Java können Sie den Konstruktoren Argumente für Eigenschaftswerte für Instanzen initialisieren. Die folgende Abbildung zeigt eine Möglichkeit, dies zu tun.
Bitte beachten Sie diesen Artikel zu lesen: link
Ich hoffe, ich habe Ihnen geholfen. Alles Gute. Prost
'a.prototype = Object.create (b.prototype);' hätte funktioniert, wenn Sie 'test2' anstelle von' testInstance' bestanden hätten und wenn Sie 'erben' aufgerufen hätten, bevor Sie versuchen, das Objekt mit zu instanziieren "neu". – Bergi
Um instanzspezifische, konstruktorinitialisierte Eigenschaften zu "erben", ist der einzige Weg, 'test1.call (this)' innerhalb von 'test2' zu tun. – Bergi
@Bergi, dieser Aufruf hat es pro Instanz funktionieren lassen, anstatt dass es alle die gleichen Mitglieder hat. Vielen Dank. – John