javascript的多态

含义

同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果

例如

导演说开始action的时候,每个演员就自己做自己该做的事情,
而不是导演一个个的去告诉每个演员去做什么
多态的最根本的好处在于,你不必再向对象询问"你是什么类型"
然后根据得到的答案调用对象的某个行为
你只管调用该行为就行了,其他的一切多态机制都会为你安排妥当

// 多态背后的思想是将 做什么 和 谁去做 分离
// 也就是将不变的事物 与 可能改变的事物 分离出来

// 先来一段反例的多态代码
var makeSound = function (animal) {
	if (animal instanceof Duck) {
		console.log('嘎嘎嘎');

	} else if (animal instanceof Chicken) {
		console.log('咯咯咯');
	}
}
var Duck = function () { };
var Chicken = function () { };

makeSound(new Duck());
makeSound(new Chicken());

// 此时如果加一个狗,还需要再去改源代码

示例

// 首先把不变的部分隔离出来
var makeSound = function (animal) {
	animal.sound();
}
//然后把可变的部分各自封装起来,
var Duck = function () { }
Duck.prototype.sound = function () {
	console.log("嘎嘎嘎");
}
var Chicken = function () { }
Chicken.prototype.sound = function () {
	console.log("咯咯咯");
}

makeSound(new Duck());
makeSound(new Chicken());

//如果有一天改需求了,加一个动物
//简单追加一条代码就可以啦
var Dog = function () { }
Dog.prototype.sound = function () {
	console.log("汪汪汪");
}
makeSound(new Dog());

实际案例

// 实际案例
var googleMap = {
	show: function () {
		console.log('开始渲染谷歌地图');
	}
}
var baiduMap = {
	show: function () {
		console.log('开始渲染百度地图');
	}
}

var renderMap = function (map) {
	if (map.show instanceof Function) {
		map.show();
	}
}

renderMap(googleMap)

你可能感兴趣的:(javascript的多态)