如何理解“构造函数是类公共标识,但原型是唯一的标识“

8 篇文章 8 订阅

如何理解"构造函数是类公共标识,但原型是唯一的标识"

区分这两个标识

公共标识:

从某种意义来说,定义构造函数就是定义类

唯一标识:

我们常常通过instanceof关键字检查某个对象是否属于某个类。但是instanceof方法实际上检查是对象的继承关系而非检测创建对象的构造函数;
例如:obj instanceof ClassA; 我们会容易错误的认为:该方法检测是obj对象是否由ClassA创建;
错误的认为如果返回true,则表示obj 是由ClassA创建;
这里我可以举一个示例代码:
即使obj 由 ClassA创建出来的,他也会有返回false的情况;这就会推翻我们前面错误的认识;

var ClassA = function(){console.log("ClassA create")};
var obj = new ClassA();
ClassA.prototype = {another:"anotherClass"};
obj instanceof ClassA //结果为:false

在这里插入图片描述

instanceof 关键字 实质对比的是该对象是否包含右侧构造函数的原型,如果包含则返回 true;
那么我们有没有更好的替代方法,而不通过构造函数这个中介来判断呢?
当然有!!!我们也可以通过isProtorypeOf()方法来判断某个对象是否包含某个原型对象;
例如:Object.prototype.isPrototypeOf(obj);
个人理解可以翻译成:Object.prototype是否在obj的原型链上?

使用isPrototypeOf()方法的好处是更直接体现了"构造函数是类公共标识,但原型是唯一的标识"这句话,不会有理解上的歧义;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jaywei.online

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值