为了账号安全,请及时绑定邮箱和手机立即绑定

instanceof运算符

instanceof运算符

qq_遁去的一_1 2018-11-15 18:14:59
https://www.ibm.com/developer...根据此文instaceof可以用下列代码模拟function instance_of(L, R) {//L 表示左表达式,R 表示右表达式   var O = R.prototype;// 取 R 的显示原型   L = L.__proto__;// 取 L 的隐式原型   while (true) {      if (L === null)        return false;      if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true        return true;      L = L.__proto__;    }   }但是var a=1;instance_of(a,Object)为truea instanceof Object却返回false,这是为什么?
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

楼主,你可以试一试 你的 instance_of 是代替不了 instanceof 的

首先,明确你的样本 a 是Number 类型

但是,执行结果如下
instance_of(a, Object) // true
instance_of(a, Number) // true

修改 instance_of 方法:

function instance_of(L, R) {

  try {

    var O = R.prototype;// 取 R 的显示原型

    L = Object.getPrototypeOf(L);// 取 L 的隐式原型

    while (true) { 

      if (L === null) 

        return false; 

      if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true 

        return true; 

      L = L.Object.getPrototypeOf(L); 

    }

  } catch (e) {

    return false

  }

}

再次实验:

var a = 1


instance_of(a, Object) // false 

instance_of(a, Number) // true


var parent = function () {}  

var child = new parent()


instance_of(child, parent) // true


查看完整回答
反对 回复 2018-12-11
  • 1 回答
  • 0 关注
  • 502 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信