什么是Javascript语言的多态

小云云
Lepaskan: 2018-01-29 13:45:56
asal
2411 orang telah melayarinya

Java语言是一门静态类型的语言,由于在代码编译时要进行严格的类型检查,所以不能给变量赋予不同类型的值,这种类型检查就会使代码变得僵硬,但是java也可以通过继承得到多态的效果(实现继承和接口继承) 可以向上转型来实现多态。

多态的实际含义是,同一操作,作用在不同的对象上面,可以产生不同的解释和不同的执行结果。javascript的变量类型在运行期是可变的,这就意味着javascript对象的多态性是与生俱来的。

下面一张图来解释:

主人同时向鸡和鸭两个对象发出指令 "发出叫声", 鸡和鸭同时发出叫声,但是他们的叫声是不一样的。
什么是Javascript语言的多态

我们用代码来演示这个例子:

传统的代码我们习惯用 if else 来堆砌硬编码代码,但是如果这个对象一直往上加就会造成不断的加代码,修改代码总是很危险的,修改的地方越多,程序出错的可能性就会越大,而且当动物的类型越多的时候就会造成if else 堆砌成了一个巨大的函数,不利于维护。

var makeSound = function(animal) {
     if (animal instanceof Dog) {
        console.log('wanwan');
     } else if(animal instanceof Cat) {
        console.log('miaomiao');
     }
}

var Dog = function() {}
var Cat = function() {}
makeSound(new Dog());
makeSound(new Cat());
Salin selepas log masuk

修改之后的代码如下:

 var makeSound = function(animal) {
     animal.sound();
}
var Dog = function() {}
Dog.prototype.sound = function(){
   console.log('wanwan');
}

var Cat = function() {}
Cat.prototype.sound = function() {
   console.log('miaomiao');
}
makeSound(new Dog());
makeSound(new Cat());
Salin selepas log masuk

如何理解如果对象无法响应某个请求,它会把这个请求委托给它的构造器的原型,这条原则是原型继承的精髓所在,下面有这样的一段代码:

var obj = {name:'lin'};

var A = function() {};

A.prototype = obj;

var a = new A();
console.log(a.name);

解释:遍历对象a所有的属性,没有找到name这个属性
查找name属性的这个请求被委托给对象a的构造器的原型,它被a._proto_记录并且指向A.prototype,
而A.prototype被设置为对象obj
在对象obj中找到name属性,并且返回。

相关推荐:

如何学习JavaScript语言?学习重难点有哪些?

javascript语言结构小记(一)_基础知识

详解JavaScript语言的基本语法要求_基础知识


Atas ialah kandungan terperinci 什么是Javascript语言的多态 . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan