日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

instanceof 原理

發布時間:2023/12/29 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 instanceof 原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

運行流程

function instance_of(L, R) { //L 表示左表達式,R 表示右表達式
var O = R.prototype; // 取 R 的顯式原型(后面的對象只取顯式原型prototype)
L = L.__proto__; // 取 L 的隱式原型(判斷的對象取__proto__,而且會一直向上判斷)
while (true) {
if (L === null)
return false;
if (O === L) // 這里重點:當 O 嚴格等于 L 時,返回 true
return true;
L = L.__proto__;
}
}

在 JavaScript 原型繼承結構里面,規范中用 [[Prototype]] 表示對象隱式的原型,在 JavaScript 中用 __proto__ 表示,并且在 Firefox 和 Chrome 瀏覽器中是可以訪問得到這個屬性的,但是 IE11 以下不行。所有 JavaScript 對象都有 __proto__ 屬性,但只有 Object.prototype.__proto__ 為 null,前提是沒有在 Firefox 或者 Chrome 下修改過這個屬性。這個屬性指向它的原型對象。 至于顯式的原型,在 JavaScript 里用 prototype 屬性表示



判斷舉例

Object instanceof Object

// 為了方便表述,首先區分左側表達式和右側表達式
ObjectL = Object, ObjectR = Object;
// 下面根據規范逐步推演
O = ObjectR.prototype = Object.prototype
L = ObjectL.__proto__ = Function.prototype
// 第一次判斷
O != L
// 循環查找 L 是否還有 __proto__
L = Function.prototype.__proto__ = Object.prototype
// 第二次判斷
O == L
// 返回 true

Function instanceof Function

// 為了方便表述,首先區分左側表達式和右側表達式
FunctionL = Function, FunctionR = Function;
// 下面根據規范逐步推演
O = FunctionR.prototype = Function.prototype
L = FunctionL.__proto__ = Function.prototype
// 第一次判斷
O == L
// 返回 true

Foo instanceof Foo

// 為了方便表述,首先區分左側表達式和右側表達式
FooL = Foo, FooR = Foo;
// 下面根據規范逐步推演
O = FooR.prototype = Foo.prototype
L = FooL.__proto__ = Function.prototype
// 第一次判斷
O != L
// 循環再次查找 L 是否還有 __proto__
L = Function.prototype.__proto__ = Object.prototype
// 第二次判斷
O != L
// 再次循環查找 L 是否還有 __proto__
L = Object.prototype.__proto__ = null
// 第三次判斷
L == null
// 返回 false

總結

以上是生活随笔為你收集整理的instanceof 原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。