在Javascript中学习对象和原型时遇到的练习可以指导我一点吗?
让我们说我必须用3只动物(猫鸟虫)制作简单的食物链。
它应该以下面的输出可行的方式实现3个对象(所有对象应该实现相同的方法“吃”):
var cat1 = Object.create(Cat);
var cat2 = Object.create(Cat);
var bird = Object.create(Bird);
var worm = Object.create(Worm);
cat1.eat(bird); // "Tasty!"
cat2.eat(bird); // "Tasty!"
bird.eat(worm); // "Tasty!"
worm.eat(cat1); // "Bleeh!"
cat1.eat(cat2); // "Bleeh!"
所以当我创建对象时:
var Cat = {
eat = function(){}
};
var Bird = {
eat = function (){}
};
var Worm = {
eat = function (){}
};
我应该把“如果”的陈述确定何时返回适当的值?(猫吃鸟,鸟吃虫,鸟不能吃鸟等)还有其他任何方法写一种方法吃到所有人动物?
答案 0 :(得分:1)
你可以采用的一种方法是定义一个动物“类”,它是JS中的一个函数(至少在ES5中)。然后,您可以创建将继承Animal类的Cat“类”,并在其中定义它所吃的内容。 eat
函数将是Animal类中的通用函数,这样您就不必每次都使用不同的值来覆盖它。
var Animal = function() {
this.canEat = [];
}
Animal.prototype.eat = function (animal) {
if (this.canEat && this.canEat.indexOf(animal) !== -1) {
console.log('Yum!');
}
else {
console.log('Bleh!');
}
};
var Cat = function() {
this.canEat = ['bird'];
}
// Inheritance
Cat.prototype = Object.create(Animal.prototype);
var cat = new Cat();
cat.eat('bird'); // Yum!
cat.eat('cat'); // Bleh!
答案 1 :(得分:1)
你必须以适当的方式组织对象,你必须继承。
var Animal = {
// set food chain hierarchy
// worm -> 1, birds -> 2, cat -> 3, lion -> 4
level: 0,
eat: function(otherAnimal) {
return this.level > otherAnimal.level ? 'Tasty':'Bleeh';
},
init: function(level){
this.level = level;
return this;
}
};
var cat1 = Object.create(Animal).init(3);
var cat2 = Object.create(cat1);
var bird = Object.create(Animal).init(2);
var worm = Object.create(Animal).init(1);
cat1.eat(bird); // "Tasty!"
cat2.eat(bird); // "Tasty!"
bird.eat(worm); // "Tasty!"
worm.eat(cat1); // "Bleeh!"
cat1.eat(cat2); // "Bleeh!"
答案 2 :(得分:0)
工作Fiddle
function Organism(){};
function Cat(){};
function Bird(){};
function Worm(){};
Organism.prototype.eat = function(food){
if(this.level > food.level){
console.log('Tasty!');
} else {
console.log('Bleeh!');
}
}
Cat.prototype = new Organism();
Cat.prototype.level = 3;
Bird.prototype = new Organism();
Bird.prototype.level = 2;
Worm.prototype = new Organism();
Worm.prototype.level = 1;
var cat1 = new Cat();
var cat2 = new Cat();
var bird = new Bird();
var worm = new Worm();
cat1.eat(bird); // "Tasty!"
cat2.eat(bird); // "Tasty!"
bird.eat(worm); // "Tasty!"
worm.eat(cat1); // "Bleeh!"
cat1.eat(cat2); // "Bleeh!"