cari

Rumah  >  Soal Jawab  >  teks badan

javascript - instanceof operator

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

Berdasarkan artikel ini

instaceof boleh disimulasikan dengan kod berikut

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__; 
  } 
 }
     

Tetapi
var a=1;
instance_of(a,Object) is true
instanceof Object mengembalikan palsu, kenapa ini?

黄舟黄舟2786 hari yang lalu742

membalas semua(3)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-05-19 10:28:43

    Pemilik, anda boleh mencuba instance_of 是代替不了 instanceof

    anda

    Pertama, pastikan sampel a anda adalah jenis Nombor

    Walau bagaimanapun, keputusan pelaksanaan adalah seperti berikut
    instance_of(a, Object) // true
    instance_of(a, Number) // true

    Ubah suai contoh_kaedah:

    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
      }
    }

    Eksperimen lagi:

    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

    balas
    0
  • 世界只因有你

    世界只因有你2017-05-19 10:28:43

    Standard yang digunakan dalam artikel ini ialah ES3

    ES6 instanceof标准更长一点, 规定了当type(L)不是Object时L instanceof R sepatutnya mengembalikan palsu.

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:28:43

    Satu bahagian ialah kandungan rantai prototaip, dalam kod simulasi anda:

        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__; 
           } 
         }

    L = L._proto_ bermakna L akan mencari prototaip sehingga rantai prototaip, dan dalam contoh ini, ia akhirnya membungkus objek dari Number ==> Objek objek, dan R ialah Objek, Selepas lulus pengendali kongruen, ia mengembalikan benar, jadi instance_of(a,Object) adalah benar. L = L._proto_ 代表着L会沿着原型链一直向上查找原型,而在本例中,最后是从Number包装对象==>Object对象,而R就是Object,再经过全等运算符之后就返回true,所以instance_of(a,Object)为true。

    a instanceof Object

    a instanceof Object mengembalikan palsu kerana ia tidak melalui carian rantai prototaip dan diadili secara langsung antara tika objek Nombor dan Objek, jadi hasilnya adalah palsu🎜

    balas
    0
  • Batalbalas