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?
Pemilik, anda boleh mencuba
andainstance_of
是代替不了instanceof
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:
Eksperimen lagi:
Standard yang digunakan dalam artikel ini ialah ES3
ES6
instanceof
标准更长一点, 规定了当type(L)
不是Object时L instanceof R
sepatutnya mengembalikan palsu.Satu bahagian ialah kandungan rantai prototaip, dalam kod simulasi anda:
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, jadiinstance_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🎜