DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> JavaScript對象創建及繼承原理實例解剖
JavaScript對象創建及繼承原理實例解剖
編輯:JavaScript基礎知識     
對象創建
當一個函數對象被創建時候,Function構造器產生的函數對象會運行類似這樣的代碼:
復制代碼 代碼如下:
this.prototype={constructor:this};

假設函數F
F用new方式構造對象時,對象的constructor被設置成這個F.prototype.constructor
如果函數在創建對象前修改了函數的prototype,會影響創建出來對象的construtor屬性
如:
復制代碼 代碼如下:
function F(){};
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__;
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.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會無法通過,其他浏覽器上應該都沒有問題
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved