Очень сложно выразить словами, что я хочу, поэтому я написал пример JS, который должен помочь найти точку.Как продлить объект прототипа JavaScript дважды?
// create animal class
var animal = function(name) {
this.name = name;
};
animal.prototype.getSound = function() {
return this.sound === undefined ? 'nothing' : this.sound;
};
// create animal type classes
var dog = new animal("dog");
dog.prototype.sound = "woof";
var cat = new animal("cat");
dog.prototype.sound = "meow";
var worm = new animal("worm");
// create specific animals
var spot = new dog();
var mittens = new cat();
var squiggles = new worm();
Я хочу создать экземпляры функции JavaScript и расширить прототип несколько раз, так что в моем примере конкретных животных имеют методы и свойства как их рода и общего царства животных.
К сожалению, он появляется после первого запуска, свойство прототипа больше не существует. Я не хочу продолжать распространять его так, чтобы у главного прототипа были все методы для всех животных, червь и собака должны иметь .dig()
, а кошка должна иметь .climb()
без других классов, имеющих эти методы.
И наоборот, я не хочу постоянно пересматривать методы для каждого экземпляра. Рукавицы должны иметь тот же прототип, что и класс cat, и должны иметь те же самые функциональные объекты, что и Crookshanks cat, без какой-либо дополнительной работы по назначению.
Как достичь этого с помощью моего примера?
Это очень трудно выразить словами, почему, но попробуйте использовать 'Object.create' : http://jsfiddle.net/ykurmangaliyev/w8Lfyxtr/3/. –
Очень интересно. Это также создает другой прототип? – Josh
Эти две статьи могут быть вам интересны: http://stackoverflow.com/questions/13040684/javascript-inheritance-object-create-vs-new и http://stackoverflow.com/questions/4166616/understanding-the- разница между объектами-create-and-new-somefunction –