说到这两个属性,那不得不说一下_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可以使创建当前实例的对象暴露出来,从而可以对它进行修改。

js constructor 和 instanceof的更多相关文章

  1. typeof、constructor和instanceof

    在JavaScript中,我们经常使用typeof来判断一个变量的类型,使用格式为:typeof(data)或typeof data.typeof返回的数据类型有六种:number.string.bo ...

  2. js prototype __proto__ instanceof constructor

    JS中有两个特殊的对象:Object与Function,它们都是构造函数,用于生成对象. Object.prototype是所有对象的祖先,Function.prototype是所有函数的原型,包括构 ...

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

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

  4. JS - Constructor还可以这样用

    JS中Constructor好用法: 即在只知道一个对象实例的情况下(不知道对象名),重新初始化一个新实例: function Person( firstname, lastname, age ) { ...

  5. JavaScript高级程序设计(五): js的关键字instanceof和typeof使用

    JavaScript中instanceof和typeof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: 一.typeof 1.含义:typeof返回一个表达式的数据类型的字符 ...

  6. JS中 typeof,instanceof类型检测方式

    在js中的类型检测目前我所知道的是三种方式,分别有它们的应用场景: 1.typeof:主要用于检测基本类型. typeof undefined;//=> undefined typeof 'a' ...

  7. js中的instanceof运算符

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

  8. JS typeof与instanceof的区别

    typeof 与 instanceof 通常是用来判断一个变量的类型,二者有如下区别: typeof: 判断一个变量的类型,返回值是字符串形式,返回结果有如下几种: number,boolean,st ...

  9. JS constructor

    1.每个对象都有一个constructor,都指向创建该对象的方法. 2.function对象的prototype的constructor也是指向该方法.如果对prototype进行重写,constr ...

随机推荐

  1. 100 Most Popular Machine Learning Video Talks

    100 Most Popular Machine Learning Video Talks 26971 views, 1:00:45,  Gaussian Process Basics, David ...

  2. Mac下crontab定时python任务

    1.新建crontab_file vim输入代码*/ * * * * /Library/Frameworks/Python.framework/Versions/3.6/bin/python3 /Us ...

  3. idea注册码激活防和谐

    1.到网站 http://idea.lanyus.com/ 获取注册码: 2.修改hosts文件,位于C:\Windows\System32\drivers\etc,添加一行,win10推荐使用not ...

  4. SpringBoot 线程池配置 实现AsyncConfigurer接口方法

      目的是:  通过实现AsyncConfigurer自定义线程池,包含异常处理  实现AsyncConfigurer接口对异常线程池更加细粒度的控制 *a) 创建线程自己的线程池  b) 对void ...

  5. 使用Console命令调试JS

    一.console 的对象常用的方法 1.console.log(object[, object, ...])使用频率最高的一条语句:向控制台输出一条消息.支持 C 语言 printf 式的格式化输出 ...

  6. WPF让人哭笑不得的BUG

    前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP.WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常.很 ...

  7. kdissert:linux下的自由脑图软件

    ----------------------------------------------------作者: 吉庆   email: jiqingwu@gmail.commainpage: http ...

  8. Java 图片转字节流 实现 图片->字节流(字符串)->图片

    //该方法实现图片转String 参数为图片的路径 可以是file.toString()得到public String testUpload(String path) { try { String s ...

  9. JavaScript逻辑运算符

               逻辑运算符   或与非:&&  ||  ! ----------------------------------------------------------- ...

  10. Python数据类型(整型,字符串类型,列表)

    一:数据的概念 1.数据是什么 x=10,数据10就是我们要存储的数据. 2.为什么数据要分不同的种类? 因为数据是用来表示状态的,不同的状态就要用不同类型的数据去表示. 3:Python中常见的数据 ...