JS基礎 instanceof詳解

2022-09-11 09:09:10 字數 1246 閱讀 3160

instanceof 運算子用於檢測建構函式的 prototype 屬性是否出現在某個例項物件的原型鏈上。

語法:object instanceof constructor

引數object

某個例項物件

constructor

某個建構函式

//

定義建構函式

function

c(){}

function

d(){}

var o = new

c();

o instanceof c; //

true,因為 object.getprototypeof(o) === c.prototype

o instanceof d; //

false,因為 d.prototype 不在 o 的原型鏈上

o instanceof object; //

true,因為 object.prototype.isprototypeof(o) 返回 true

c.prototype instanceof object //

true,同上

c.prototype ={};

var o2 = new

c();

o2 instanceof c; //

true

o instanceof c; //

false,c.prototype 指向了乙個空物件,這個空物件不在 o 的原型鏈上.

d.prototype = new c(); //

繼承var o3 = new

d();

o3 instanceof d; //

true

o3 instanceof c; //

true 因為 c.prototype 現在在 o3 的原型鏈上

需要注意的是,如果表示式 obj instanceof foo 返回 true,則並不意味著該表示式會永遠返回 true,因為 foo.prototype 屬性的值有可能會改變,改變之後的值很有可能不存在於 obj 的原型鏈上,

這時原表示式的值就會成為 false。另外一種情況下,原表示式的值也會改變,就是改變物件 obj 的原型鏈的情況,

雖然在目前的es規範中,我們只能讀取物件的原型而不能改變它,但借助於非標準的 __proto__ 偽屬性,是可以實現的。

比如執行 obj.__proto__ = {} 之後,obj instanceof foo 就會返回 false 了。

js基礎 建構函式與instanceof

構造函式呼叫流程 立即建立乙個新的物件 將新建的物件設定為函式中的this,可以使用this來引用新建的物件 逐行執行函式中的 將新建的物件作為返回值返回 當使用同乙個建構函式建立的物件成為同一類物件,而每個不同的建構函式成為一類 通過建構函式建立的物件成為該類的例項。當所有的類中都呼叫同乙個函式方...

js高階 探索instanceof

a instanceof a 作用 判斷左邊這個物件a 例項或屬性 是不是右邊這個型別 建構函式 a的例項,左邊一般是物件的屬性或物件的例項,右邊一般是建構函式或物件,主要是通過左邊的例項的隱式原型屬性一直往原型鏈中找,一直都是通過原型物件的隱式原型屬性往原型鏈中找,右邊也通過建構函式的顯示原型屬性...

js之 typeof和instanceof的區別

typeof和instanceof的區別 typeof可以獲取任意變數的型別 任意型別的物件用typeof獲得到的都是object 但是instanceof只能判斷物件的型別。示例一 這樣就可以在控制台上獲得 object 所以驗證了我們上邊所說的 任意型別的物件用typeof獲得到的都是objec...