首頁 >web前端 >js教程 >JavaScript物件建立及繼承原理實例解剖_基礎知識

JavaScript物件建立及繼承原理實例解剖_基礎知識

WBOY
WBOY原創
2016-05-16 17:41:151024瀏覽
物件建立
當一個函數物件被建立時候,Function建構器產生的函式物件會執行類似這樣的程式碼:
複製程式碼 程式碼如下:

this.prototype={constructor:this};

假設函數;


假設函數;
FF用new方式建構物件時,物件的constructor被設定成這個F.prototype.constructor 如果函式在建立物件前就修改了函式的prototype,會影響建立出來物件的construtor屬性如: 複製程式碼


程式碼如下:

function F(){};
function F(){};
.prototype={constructor:'1111'};
var o=new F();//o.constructor==='1111' true

繼承原理
繼承原理JavaScript中的繼承是使用原型鏈的機制,每個函數的實例都共享構造函數prototype屬性中定義的數據,要使一個類別繼承另一個,需要把父函數實例賦值到子函數的prototype屬性。且在每次new實例物件時,物件的私有屬性__proto__會被自動連接到建構函數的prototype。 instanceof就是尋找實例物件的私有prototype屬性鏈來決定是否為指定物件的實例
具體實例





複製程式碼


程式碼如下:


//instanceof實作
function Myinstanceof(obj,type)
{
var proto=obj.__proto=obj.__proto=obj.__ 🎜>while(proto)
{
if(proto ===type.prototype)break;
proto=proto.__proto__;
}
return proto!=null;
}
function View(){}
function TreeView(){}
TreeView.prototype=new View();//TreeView.prototype.__proto__=TreeView.prototype 自動完成TreeView.prototypeTreeView.prototype .constructor=TreeView;//修正constructor var view=new TreeView();//view.__proto__=TreeView.prototype 自動完成alert(view instanceof View); //true 查找到view.__proto__. __proto__時找到alert(view instanceof TreeView); //true 查找到view.__proto__時找到alert(Myinstanceof(view,View)); //true alert(Myinstanceof(view, TreeView)); //true 上面自訂的Myinstanceof就是自己實作的一個instanceof功能的函數,由於IE核心實例儲存prototype不是__proto__,所以Myinstanceof會無法通過,其他瀏覽器上應該都沒問題
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn