js constructor 和 instanceof
說到這兩個屬性,那不得不說一下_proto_這個屬性,通常這個屬性是隱藏屬性,是不允許被暴露的,而某些瀏覽器為了開發者能夠很好的理解,而將這個屬性暴露出來,比如Mozilla FireFox,這就是為什么有些同學在我的上一節文章測試代碼的時候打印不出來了。
不扯遠了,先來看一下instanceof 這個關鍵字,學過java類似的高級語言都應該知道吧 instancaof是用來檢測這個實例是不是由這個類所創建的,換言之,就是檢測這個實例對象是不是這個類new出來的。
看一段代碼
function A(){};
var a = new A();
alert(a instanceof A);
你會發現alert出來的是true ,這正是體現了instanceof的作用了。
接下(xia)來我們改(gai)動一下(xia)_proto_
function A(){};
var a = new A();
a.__proto__ = {};
alert(a instanceof A);
我們讓a._proto_指向了一個空對象,而下面alert出來的卻是false了,到這里我們就大概知道了instanceof的作用了,instanceof就是用來檢測當前對象是否在原型鏈上的關鍵字,換言之,就是用來檢測當前對象的_proto_屬性是否指向了創建它的對象的prototype所指向的那塊內存。所以這里就很好解釋了,為什么更改了一下_proto_就可以使結果變為false。
畫個示意圖,其實這個很好理解的

constructor
接下來看一下constructor。
constructor是每一個實例對象都擁有的屬性,而這個屬性也相當于是一個指針,它指向于創建當前對象的對象,也就是說a的constructor指向于A。
看一段代碼
function A(){};
var a = new A();
alert(a.constructor);

接下來你會在屏幕上看到function A(){}; 這就是constructor 這個屬性的作用了
這樣看來的話它和 instanceof 關鍵字確實有些相像,可是如果你仔細觀察的話你會發現constructor只是個屬性,而就于js而言,屬性值是可以隨時改變的,所以說,constructor具有不確定性,但是通常的話這個值是指向創建當前實例的對象的
而instanceof只(zhi)返回一個boolean類型的(de)值,無法獲取(qu)創建當前實例(li)的(de)對(dui)象,所以利(li)用(yong)constructor可(ke)以使創建當前實例(li)的(de)對(dui)象暴露出來,從而可(ke)以對(dui)它(ta)進行修改。
