说到这两个属性,那不得不说一下_proto_这个属性,通常这个属性是隐藏属性,是不允许被暴露的,而某些浏览器为了开发者能够很好的理解,而将这个属性暴露出来,比如Mozilla FireFox,这就是为什么有些同学在我的上一节文章测试代码的时候打印不出来了。

不扯远了,先来看一下instanceof 这个关键字,学过java类似的高级语言都应该知道吧 instancaof是用来检测这个实例是不是由这个类所创建的,换言之,就是检测这个实例对象是不是这个类new出来的。
看一段代码

function A(){};
var a = new A();
alert(a instanceof A);

你会发现alert出来的是true ,这正是体现了instanceof的作用了。
接下来我们改动一下_proto_

function A(){};
var a = new A();
a.__proto__ = {};
alert(a instanceof A);

我们让a._proto_指向了一个空对象,而下面alert出来的却是false了,到这里我们就大概知道了instanceof的作用了,instanceof就是用来检测当前对象是否在原型链上的关键字,换言之,就是用来检测当前对象的_proto_属性是否指向了创建它的对象的prototype所指向的那块内存。所以这里就很好解释了,为什么更改了一下_proto_就可以使结果变为false。
画个示意图,其实这个很好理解的

constructor

接下来看一下constructor。
constructor是每一个实例对象都拥有的属性,而这个属性也相当于是一个指针,它指向于创建当前对象的对象,也就是说a的constructor指向于A。
看一段代码

function A(){};
var a = new A();
alert(a.constructor);

接下来你会在屏幕上看到function A(){}; 这就是constructor 这个属性的作用了
这样看来的话它和 instanceof 关键字确实有些相像,可是如果你仔细观察的话你会发现constructor只是个属性,而就于js而言,属性值是可以随时改变的,所以说,constructor具有不确定性,但是通常的话这个值是指向创建当前实例的对象的
而instanceof只返回一个boolean类型的值,无法获取创建当前实例的对象,所以利用constructor可以使创建当前实例的对象暴露出来,从而可以对它进行修改。

转载于:https://www.cnblogs.com/haodawang/p/5967271.html

js constructor 和 instanceof相关推荐

  1. JS中关于构造函数、原型链、prototype、constructor、instanceof、__proto__属性

    在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中引入 ...

  2. 详解js中typeof、instanceof与constructor

    typeof返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function.语法为typeof(da ...

  3. JS instanceof用法

    ** js中的instanceof运算符 ** 概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instan ...

  4. 原生JS大揭秘—数据类型

    JS中九个内置对象 在ECMAScript规范(ES5)中定义了六种数据类型: 其中原始值类型有5种,引用类型有1种 (一)Number (有包装对象 - new Number()) 数值型,包括整形 ...

  5. js继承(ES5,ES6)

    初始化 function Person(name) {this.name = namethis.type = ["css", "js", "html& ...

  6. js 面试的坑(三)

    判断页面滚动方向(上下) <!DOCTYPE html> <html><head><meta charset="UTF-8">< ...

  7. 前端学习--js.2

    写一个通用的事件侦听器函数 markyun.Event = { //页面加载完成后 readyEvent :function(fn) { if(fn==null) { fn=document; } v ...

  8. JS面试八股文知识总结(最新)

    文章目录 一.JS数据类型 二.判断数据类型的方法 三.new操作符具体做了什么? 三.dom.onclick 和 dom.addEventListener的区别? 四.JS内置属性和方法 五.逻辑与 ...

  9. java typeof_typeof和instanceof的区别

    instanceof instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性. 语法 object instanceof constructor 描述 ...

  10. java 执行js selenium_如何在Selenium WebDriver Java中使用JavaScript

    根据您之前的问题,我想您想要从Java的WebDriver运行JavaScript代码段.如果我错了,请纠正我. WebDriverJs实际上是"只是"另一种WebDriver语言 ...

最新文章

  1. 测试几款大型LED的反向电流大小
  2. SD-WAN — 云专线(企业入云)
  3. null对象 java_java中当给一个对象赋值为null时发生了什么
  4. [算法]链表的逆序遍历节点
  5. Python入门之中文乱码
  6. python变量分类_Python 入门系列 —— 5. 三大变量类型介绍
  7. 再学 GDI+[16]: GDI+ 的颜色常量表
  8. 关于get请求的乱码问题
  9. gba徽章机器人_《徽章机器人》倒计时网站开启 20周年纪念插画欣赏
  10. GDB使用小结- 可带参数
  11. Oracle shutdown immediate无法关闭数据库解决方法
  12. 使用GDAL获取网络数据
  13. mysqli取代mysql,什么时候应该使用MySQLi代替MySQL?
  14. oracle函数 TO_MULTI_BYTE(c1)
  15. CAB Activex
  16. 资产配置方案(基金)
  17. 计算机表格函数最大值操作,使用MAX最大值函数计算excel表格中学生成绩的最大值...
  18. 淘宝新开店铺没有营业执照怎么办
  19. 木瓜移动每日快讯0511:谷歌Chrome引入新隐私功能fenced frame
  20. 自然语言处理 # 中文分词技术 概述

热门文章

  1. 深圳.NET俱乐部10月Asp.net技术讨论会小结暨超级英雄大赛事宜
  2. GeoTiff及GDAL切图(java)
  3. 下列哪个滤波器是非线性的_上海海事数字信号处理2006试卷A参考答案
  4. java 返回泛型_Java返回类型泛型的用法小结 | 学步园
  5. mysql sql优化与调优机制详解_MySQL性能调优——锁定机制与锁优化分析详解
  6. JavaScript实用代码片段
  7. VSCode:vscode设置侧边资源管理器文字大小
  8. Vue:vue中axios发起http请求报错net::ERR_CERT_DATE_INVALID
  9. mysql be_Amobe实现MySQL读写分离
  10. WebSocket(1)---WebSocket介绍