2012-04-05 16 views
0

Wie kann ich Vererbung mit diesem Beispiel machen.Wie wird die prototypische Vererbung in diesem Fall durchgeführt?

Ich versuche, ein Objekt Literal zu erstellen, das als Singleton funktioniert. Innerhalb dieser möchte ich meine Klassen extrahieren. Außerdem sollten diese Klassen, falls zutreffend, von einander erben.

Wie so:

var Singleton = { 

    car: function() { 
     this.engine= true; 
    }, 

    ford: function() { 
     this.color = 'red'; 
    } 
}; 

Ich mag würde ford von Bar erben lassen, aber ich kann das nicht:

ford: function() { 
     this.color = 'red'; 
     this.prototype = new this.car(); 
    } 

Irgendwelche Ideen?

+1

Um damit zu beginnen, einen Konstruktor Literale statt Objekt verwenden. –

+0

[JavaScript-Vererbungsmuster] (http://bolinfest.com/javascript/inheritance.php). –

+0

Was genau meinen Sie mit "bar erben von foo"? Werden foo und bar als Konstruktor für 'neue' Aufrufe verwendet? – Phrogz

Antwort

2
var Something = { 

    foo: function() { 
     this.greet = 'hello'; 
    }, 
    bar: function() { 
     this.color = 'blue'; 
    } 
}; 

Something.bar.prototype = new Something.foo(); 
alert((new Something.bar()).greet) 

hier ein Primer auf inheritance ist

+0

Das macht genau das, was ich will. Vielen Dank! – Kriem

1

Wenn Sie bar vererben Eigenschaften von foo dann zu machen, versuchen Sie, so etwas tun könnte (beachten Sie, dass diese Art und Weise werden Sie nicht Prototyp Eigenschaften inhereted obwohl haben):

var Something = { 
    foo: function() { 
     this.greet = 'hello'; 
    }, 
    bar: function() { 
     Something.foo.call(this); 
     this.color = 'blue'; 
    } 
}; 

Und dann verwenden, dies wie:

var bar = new Something.bar(); 
bar.color // blue 
bar.greet // hello 
0

Man könnte so etwas tun:

function Foo() { 
    this.greet = "hi!"; 
} 

Bar.prototype = new Foo; 

function Bar(color) { 
    Foo.apply(this.arguments); 
    this.color = color; 
} 

var myBar = new Bar("red"); 

Ein auf diese Weise erstellter Bar hat beide Eigenschaften greet und color Eigenschaften. Diese Methode behält die Prototypeigenschaften bei.

+0

Ändern Sie 'Foo.apply (this.arguments);' in 'Foo.apply (this, arguments);'. Außerdem wäre ein etwas besserer Weg, um das Prototyp-Objekt zu erzeugen, "Bar.prototype = Object.create (Foo.prototype);". Nicht so wichtig für dieses einfache Beispiel. –

Verwandte Themen