zoukankan      html  css  js  c++  java
  • instanceof 运算符

    在JS中我们常用 typeof 运算符来判断一个变量的类型, 在使用 typeof 时如果采用引用类型存储值会出现一个问题,就是无论引用的是什么类型的对象,它返回都是 “object” .

    ECMAScript 引用了Java运算符 instanceof 来解决这个问题。

    instanceof 跟 typeof 都是用来识别正在处理的对象类型,不同之处是 instanceof 方法要求明确指定对象为某种特定类型对象。

    例一:

      var string  = new String('love you');

      string instanceof String;  //输出 true

    instanceof 运算符常规用法

    例二:

    //判断 foo 是否是 Foo 类的实例

      function Foo(){};

      var foo = new Foo();

      foo instanceof Foo;  //输出 true

    更重要的一点, instanceof 可以在继承关系中判断一个实例是否属于它的父类型

    例三:

      // 判断 foo 是否是 Foo类的实例, 并且是否是其父类型的实例

      function Aoo(){};

      function Foo(){};

      Foo.prototype = new Aoo(){};

      var foo = new Foo();

      foo instanceof Foo;  //输出 true

      foo instanceof Aoo;  //输出 true

    instanceof 复杂操作

    例四:

      Object instanceof Object  //true

      Function instanceof Function   //true

      Number instanceof Number  //false

      String instanceof String  //false

      Function instanceof Object  //true

      Foo instanceof Function  //true

      Foo instanceof Foo   //false

    想要了解上面的奥秘,需要从两方面着手:

      1、语言规范中是如何定义这个运算符的;

      2、JavaScript 原型继承机制

    JavaScript instanceof 运算符代码

    例六:

    function instance_of(L,R){  //L代表左表达式,R代表右表达式
      var W = R.prototype;  //取R的显示原型
      L = L.__proto__;  //取L的隐士原型
      while(true){
        if(L === null){
          return false;
        }
        if(W === L){  //重点,当W严格等于L时,返回true
          return true;
        }
        L = L.__proto__;
      }
    }

    JavaScript 原型继承机制

    本文涉及显示原型和隐式原型,在JavaScript中用 __proto__ 表示对象隐式原型,所有对象都有 __proto__ 属性,但只有Object.prototype.__proto__ 为null。

    JavaScript 用prototype 属性表示显示的原型。

    原型链图:

     讲解 instanceof 复杂算法

    例七:  Object instanceof Object

      ObjectR = Object;  //右表达式

      ObjectL = Object;  //左表达式

      //开始推延

      W = ObjectR.prototype = Object.prototype;

      L = ObjectL.__proto__ = Function.prototype;

      //第一次判断

      W != L;

      //循环查找 L 是否还有 __proto__

      L = Function.prototype.__proto__ = Object.prototype;

      //第二次判断

      W === L 

      // 返回 true

    本文摘自:https://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/

  • 相关阅读:
    解决maven无法下载jar的问题
    Vue-Router 基础
    VUE自定义组件
    VUE过滤器
    VUE生命周期函数
    VUE表单输入绑定
    VUE计算属性和监听器
    VUE 模板语法
    VUE介绍
    taro3.x: 函数组件createIntersectionObserver
  • 原文地址:https://www.cnblogs.com/saifei/p/9296669.html
Copyright © 2011-2022 走看看