2010-02-14 11 views
8

Więc uczę Javascript i wszystkie jego prototyp dobroć, a ja zakłopotany przez następujące:Jak uzyskać funkcję konstruktora do dziedziczenia z funkcji konstruktora w JavaScript?

Say mam ten

var Animal = function (a, b, c, d, e, f, g, h, i, j, k , l, m, n){ 
    this.a = a; 
    this.b = b; 
    //...etc... 
}; 

var x = new Animal(1,2,3....); 

Teraz jak mogę utworzyć funkcję konstruktora Cat, która dziedziczy funkcja konstruktora Zwierząt tak, że nie muszę ponownie wpisywać super długich argumentów?

Innymi słowy nie chcę tego robić:

var Cat = function (a, b, c, d, e, f, g, h, i, j, k , l, m, n){ 
    this.a = a; 
    this.b = b; 
    //...etc... 
}; 

// inherit functions if any 
Cat.prototype = new Animal; 

var y = new Cat(1,2,3....); 

Z góry dzięki! j

Odpowiedz

9

Jak to jest?

var Cat = Function (a, b, c, d, e, f, g, h, i, j, k , l, m, n){ 
    Animal.apply(this, arguments); 
}; 

// inherit functions if any 
Cat.prototype = new Animal; 

var y = new Cat(1,2,3....); 
+0

„argumenty” jest bardzo silny zmienny, który jest automatycznie w zakresie dowolnego wywołania funkcji ... popatrz tutaj, aby uzyskać więcej informacji: http://www.seifi.org/javascript/javascript-arguments.html –

+4

Yuo nie musi nawet deklarować listy argumentów (a, b, c itd.) W funkcji Cat. argumenty nadal zawierają wartości wysłane w nowym wywołaniu Cat (1,2,3 ...). –

+0

Dzięki Lars! Właśnie tego szukałem. – John

1

Szybko staje się nużące, aby zapamiętać kolejność i znaczenie długich list parametrów takich jak ten.

Możesz dodać trochę elastyczności, jeśli przekazujesz właściwości nowego zwierzęcia jako obiektu - i nie jest to takie trudne do zapamiętania jako długa lista indeksów argumentów.

function Animal(features){ 
for(var p in features){ 
    this[p]= features[p]; 
} 
}; 

You can give every cat some basic cat features automatically, 
and add specifics when you make a new cat. 

function Cat(features){ 
for(var p in features){ 
    this[p]= features[p]; 
} 
} 
Cat.prototype= new Animal({legs: 4, eats: 'meat', type: 'mammal', whiskers: true}); 
Cat.prototype.constructor=Cat; 

var Tiger= new Cat({tail: true, hunter: true}); 
Tiger begins with these properties: 

tail: true 
hunter: true 
legs: 4 
eats: meat 
type: mammal 
whiskers: true 
Powiązane problemy