如何将一个方法连接到不同的对象
how to connect one method to diffrent objects?
你能为我介绍一下我在学习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 (){}
};
我应该把"if"语句放在哪里,以确定何时返回正确的值?(猫吃鸟,鸟吃虫,鸟不能吃鸟等)还有其他方法可以写一种吃所有动物的方法吗?
一种方法是定义Animal"class",它是JS中的一个函数(至少在ES5中是这样)。然后,您可以创建Cat"类",它将继承Animal类,并在其中定义它吃什么。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!
Fiddle
您必须以正确的方式组织对象,并且必须进行继承。
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!"
工作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!"
相关文章:
- 如何在Javascript中连接两个结构不同的对象
- Will my'新对象'在套接字断开连接时被垃圾收集
- Javascript.连接两组对象的最佳方式,如SQL
- '对象不是函数'当使用angular连接两个json数组时
- 通过Ajax调用PHP文件中的MySQL连接singleton对象
- 连接与数组对象相关的文本:方式和位置
- 如何通过连接多个异步javascript调用,从对象数组中排序并获取第一个obejct
- 在 Javascript 中将对象连接为空格分隔字符串的最简单方法是什么?
- 连接对象值
- 是将连接对象传递给模块更好,还是在模块本身内连接更好
- 在单个 Javascript 函数中处理多个 websocket 订阅,但只有一个连接对象
- 使用一个属性连接对象数组
- 如何在javascript中连接对象数组,然后插入到html元素中
- 连接对象的值's属性返回NaN(Javascript)
- 连接对象数组
- Javascript -连接对象时出错
- 数据库连接'对象'在node.js中,有多个脚本文件
- 连接对象和键值并获取长度
- 通过属性javascript连接对象数组
- 使用lodash按特性连接对象数组