2010-02-14 14 views
8

Así que estoy aprendiendo Javascript y toda su bondad prototipo, y estoy perplejo sobre lo siguiente:¿Cómo obtener una función de constructor para heredar de una función de constructor en Javascript?

Decir que tengo este

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....); 

Ahora, ¿cómo puedo crear una función constructora del gato que hereda de la función constructora Animal de modo que no tengo que escribir los argumentos súper largos nuevamente?

En otras palabras, no quiero estar haciendo esto:

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....); 

Gracias de antemano! j

Respuesta

9

¿Cómo es esto?

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

"argumentos" es una variable muy potente que está automáticamente en el alcance de cualquier llamada de función ... mira aquí para obtener más información: http://www.seifi.org/javascript/javascript-arguments.html –

+4

Y ni siquiera necesitaría declarar la lista de argumentos, (a, b, c, etc.), en la función Cat. los argumentos aún contendrían los valores enviados en la nueva llamada Cat (1,2,3 ...). –

+0

¡Gracias Lars! Eso era exactamente lo que estaba buscando. – John

1

Se vuelve tedioso recordar el orden y el significado de largas listas de parámetros como este.

Puede agregar cierta flexibilidad si pasa las propiedades de un Animal nuevo como un objeto- y no es tan difícil de recordar como una larga lista de índices de argumentos.

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 
Cuestiones relacionadas