国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

JavaScript的面向?qū)ο?一)

2024-09-06 12:44:36
字體:
供稿:網(wǎng)友
一。傳統(tǒng)的基于原型(Prototype)的做法
確切地說Javascrīpt的“類”在嚴(yán)格意義上來講并不能算真正的類,從其聲明的對象到類(估切這么說)有這樣一個關(guān)系:
Instance.__proto__=InstanceClass.prototype(ie不支持)
以上說明:實例的屬性(__proto__)等于類的prototpye,我們可以看出,實例的"__proto__"正好巧接在類的"prototype"上,通過原型鏈(prototype)來查找其方法并擴展,我們會發(fā)現(xiàn)其方法(Method)與其屬性(Property)都是Public(當(dāng)然你也可以用Private,即不用this),而prototype其實就是一對象,用來記錄方法做為一個集合
假設(shè)我們聲明一個類A,可以如此
function A(){
this.className="ClassA";   //添加Public屬性,正確來說類名應(yīng)該是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,不要去直接去訪問。在這一點上,的確不如第二種方法,稍
后會說明
*/
關(guān)于"prototype"
由于Javascrīpt并沒有在系統(tǒng)內(nèi)部并未使用過“繼承”(很大可能),所以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,現(xiàn)在通過實例擴展一個方法,這兒在實際應(yīng)用當(dāng)中并不推薦這樣做,下例:
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴城市| 福建省| 六盘水市| 彰化市| 邢台县| 响水县| 会泽县| 铁岭市| 林西县| 阳原县| 林芝县| 无极县| 玉田县| 衡阳市| 晋中市| 南和县| 河源市| 左云县| 邛崃市| 丽水市| 云龙县| 花垣县| 黔西县| 鸡泽县| 南昌县| 禹州市| 枣强县| 葫芦岛市| 金平| 会昌县| 原阳县| 垦利县| 镇原县| 通榆县| 玉溪市| 泸州市| 石狮市| 晋江市| 玉溪市| 大田县| 瑞昌市|