前端入门13-JavaScript进阶之原型 (4)

即,默认情况下,构造函数的 prototype 指向原型,原型的 constructor 指向构造函数,那么从该构造函数创建的对象都继承了原型的这个属性可指向构造函数。

所以,在这些场景下,可用对象的 constructor.name 来获取构造函数的函数名,用函数名作为对象的标识。

function A(){} //定义构造函数A var a = new A(); var b = {};

函数名

这种方式有个局限,如果手动修改构造函数的 prototype,破坏了对象的原型链,那么此时,新创建的对象的 constructor 就不是指向创建它的构造函数了,此时,这种方式就无法处理了。

由于 JavaScript 不像 Java 这种静态的类结构语言,所以没有一种完美的方式适用于各自场景中来区分对象的标识,只能是在适用的场景选择适合的方式。

所以,在 JavaScript 有一种编程理念:鸭式辩型

鸭式辩型

我不是很理解中文翻译为什么是这个词,应该是某个英文词直译过来的。

它的理念是:像鸭子一样走路、游泳、嘎嘎叫的鸟就称它为鸭子。

通俗点说,编程时,不关心对象所属的标识,不关心对象继承自哪个原型、由哪个构造函数创建,只要这个对象含有相同的属性、行为,那么就认为它们归属于同一类。

有个例子就是:类数组对象,它本质并不是数组对象,但由于具有数组对象的特征,所以基本上可以把它当做数组来使用。

对应到编程中,不应用判断对象是否拥有相同的标识来区分对象,而是应该判断对象是否含有期望的属性即可。

大家好,我是 dasu,欢迎关注我的公众号(dasuAndroidTv),公众号中有我的联系方式,欢迎有事没事来唠嗑一下,如果你觉得本篇内容有帮助到你,可以转载但记得要关注,要标明原文哦,谢谢支持~

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxfpy.html