Как получить функцию конструктора для наследования от функции конструктора в Javascript? - PullRequest
8 голосов
/ 15 февраля 2010

Итак, я изучаю Javascript и все его прототипы, и я озадачен следующим:

Скажи, что у меня есть

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

Теперь, как мне создать функцию конструктора Cat, которая наследуется от функции конструктора Animal, чтобы мне больше не приходилось вводить супер длинные аргументы?

Другими словами, я не хочу этим заниматься:

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

Заранее спасибо! J

Ответы [ 2 ]

9 голосов
/ 15 февраля 2010

Как это?

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....);
1 голос
/ 15 февраля 2010

Быстро становится утомительно запоминать порядок и значение длинных списков параметров, подобных этому.

Вы можете добавить некоторую гибкость, если передадите свойства нового животного как объект. и это не так сложно запомнить, как длинный список индексов аргументов.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...