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