JavaScript的物件導向(一)

來源:互聯網
上載者:User

一。傳統的基於原型(Prototype)的做法
確切地說Javascrīpt的“類”在嚴格意義上來講並不能算真正的類,從其聲明的對象到類(估切這麼說)有這樣一個關係:
Instance.__proto__=InstanceClass.prototype(ie不支援)
以上說明:執行個體的屬性(__proto__)等於類的prototpye,我們可以看出,執行個體的"__proto__"正好巧接在類的"prototype"上,通過原型鏈(prototype)來尋找其方法並擴充,我們會發現其方法(Method)與其屬性(Property)都是Public(當然你也可以用Private,即不用this),而prototype其實就是一對象,用來記錄方法做為一個集合
假設我們聲明一個類A,可以如此
function A(){
this.className="ClassA"; //添加Public屬性,正確來說類名應該是Private的
}
//添加一方法
A.prototype.getClassName=function(){
return this.className; //this指代A,而不是prototype
}
//聲明一對象
var AObj=new A();
alert(AObj.__proto__==A.prototype); //ie下無效,ff下為true,說明上面的驗證是正確的
//我們來看看對象屬性
/*
由於用了this,className即為Public,即可以隨意修改或讀取
如果要保護起來,就要用到Private,那麼可以去掉其this首碼,做為保護
讀的時候用一公開方法,即prototype下的方法:
A.prototype.getClassName=function(){
return className; //行不通,不存在,className是undefined
}
在這兒也只能約定一下,給className加上this,不要去直接去訪問。在這一點上,的確不如第二種方法,稍
後會說明
*/
關於"prototype"
由於Javascrīpt並沒有在系統內部並未使用過“繼承”(很大可能),所以class下的prototype得到的全是
頂層Object,後期在繼承的時候,我們可以看到這樣的一個式子:
child.prototype=new parent();
繼承兩字帶引號的意思是說就算有繼承也並非真正意義上的繼承,也只是通過prototype巧接得到。
用執行個體擴充一個方法到類,這兒不得不提及__proto__這個屬性 複製代碼 代碼如下:<scrīpt LANGUAGE="Javascrīpt">
<!--
function abc(){
var ōwner=this;
owner.k="pp";
owner.abc=function(){
}
}
abc.prototype.def=function(){
}
var s=new abc();
for(var t in abc.prototype){
alert("prototype指向:"+t+"="+abc.prototype[t]);
}
for(var t in s.__proto__){
alert("__proto__指向:"+t+"="+s.__proto__[t]);
}
//-->
</scrīpt>

在ff下我看可以看到執行個體名.__proto__=類.prototype,現在通過執行個體擴充一個方法,這兒在實際應用當中並不推薦這樣做,下例:
s.__proto__.hjk=function(){
return "hjk";
}
alert(s.hjk());
for(var t in abc.prototype){
alert("prototype指向:"+t+"="+abc.prototype[t]);
}
這下應該明白了吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.