Пример Javascript Duck Typing?

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

Есть хороший пример того, как это делается? У меня есть пример внизу, но он назначает только одну функцию за раз. Можем ли мы назначить объекту целую группу методов, например, можем ли мы установить прототипOceanAnimal который может «плавать», «нырять» и «подниматься», прототипLandAnimal для «запуска», «ходьбы» и «прыжка», и позволить объекту наследовать от одного или обоих из них? (таким образом, объект рыбы может наследовать или получать возможностиOceanAnimalи черепаха может получить возможности какOceanAnimal а такжеLandAnimal?)

var yoyo = {
    name: "Yoyo",
    type: "turtle"
}

var simba = {
    name: "Simba",
    type: "lion"
}

var dolphy = {
    name: "Dolphy",
    type: "dolphin"
}

function swim(n) {
    console.log("My name is", this.name, ", I am a", this.type, "and I just swam", n, "feet")
}

function run(n) {
    console.log("My name is", this.name,  ", I am a", this.type, "and I just ran", n, "feet")
}

Object.prototype.respondTo = function(method) {
    return !!(this[method] && (typeof this[method] === "function"));
}

yoyo.swim = swim;
yoyo.swim(10);

dolphy.swim = swim;
dolphy.swim(80);

simba.run = run;
simba.run(200);

yoyo.run = run;
yoyo.run(2);

yoyo.walk = run;
yoyo.walk(1);

console.log(simba.respondTo("swim"));
console.log(simba.respondTo("run"));
console.log(simba.respondTo("walk"));

console.log(yoyo.respondTo("run"));
console.log(yoyo.respondTo("walk"));
console.log(yoyo.respondTo("fly"));

if(dolphy.respondTo("run")) {
    dolphy.run(10);
}

if(dolphy.respondTo("swim")) {
    dolphy.swim(10);
}

выход:

My name is Yoyo , I am a turtle and I just swam 10 feet 
My name is Dolphy , I am a dolphin and I just swam 80 feet 
My name is Simba , I am a lion and I just ran 200 feet 
My name is Yoyo , I am a turtle and I just ran 2 feet 
My name is Yoyo , I am a turtle and I just ran 1 feet 
false 
true 
false 
true 
true 
false 
My name is Dolphy , I am a dolphin and I just swam 10 feet

Ответы на вопрос(3)

Ваш ответ на вопрос