国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

javascript - instanceof運(yùn)算符
黃舟
黃舟 2017-05-19 10:26:43
0
3
810

https://www.ibm.com/developer...

根據(jù)此文

instaceof可以用下列程式碼模擬

function instance_of(L, R) {//L 表示左表達(dá)式,R 表示右表達(dá)式
  var O = R.prototype;// 取 R 的顯示原型
  L = L.__proto__;// 取 L 的隱式原型
  while (true) { 
    if (L === null) 
      return false; 
    if (O === L)// 這里重點(diǎn):當(dāng) O 嚴(yán)格等于 L 時(shí),返回 true 
      return true; 
    L = L.__proto__; 
  } 
 }
     

但是
var a=1;
instance_of(a,Object)為true
a instanceof Object卻傳回false,這是為什麼?

黃舟
黃舟

人生最曼妙的風(fēng)景,竟是內(nèi)心的淡定與從容!

全部回覆(3)
伊謝爾倫

樓主,你可以試試 你的 instance_of 是代替不了 instanceof

首先,明確你的樣本 a 是Number 類型

但是,執(zhí)行結(jié)果如下
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)// 這里重點(diǎn):當(dāng) O 嚴(yán)格等于 L 時(shí),返回 true 
        return true; 
      L = L.Object.getPrototypeOf(L); 
    }
  } catch (e) {
    return false
  }
}

再次實(shí)驗(yàn):

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
世界只因有你

這個(gè)文章中用的標(biāo)準(zhǔn)是ES3的

ES6的instanceof標(biāo)準(zhǔn)更長(zhǎng)一點(diǎn), 規(guī)定了當(dāng)type(L)不是Object時(shí)L instanceof R 應(yīng)當(dāng)回傳false. 這個(gè)模擬程式碼不適用

曾經(jīng)蠟筆沒(méi)有小新

有一部分是原型鏈的內(nèi)容,在你的模擬程式碼中:

    function instance_of(L, R) {//L 表示左表達(dá)式,R 表示右表達(dá)式
      var O = R.prototype;// 取 R 的顯示原型
      L = L.__proto__;// 取 L 的隱式原型
      while (true) { 
        if (L === null) 
          return false; 
        if (O === L)// 這里重點(diǎn):當(dāng) O 嚴(yán)格等于 L 時(shí),返回 true 
          return true; 
          L = L.__proto__; 
       } 
     }

L = L._proto_ 代表著L會(huì)沿著原型鏈一直向上查找原型,而在本例中,最后是從Number包裝對(duì)象==>Object對(duì)象,而R就是Object,再經(jīng)過(guò)全等運(yùn)算符之后就返回true,所以instance_of(a,Object)為true。

a instanceof Object回傳false,是因?yàn)樗粫?huì)經(jīng)過(guò)原型鏈查找,直接就是Number物件的實(shí)例與Object的判斷,所以結(jié)果為false

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板