如果看了上一小節(jié)的最后一個(gè)例子,對(duì)自定義的“類”應(yīng)該比較熟悉了。
在javascript中,可以說沒有方法,因?yàn)楹瘮?shù)和字符串一樣也是種數(shù)據(jù)類型,但類中的函數(shù)可以用this關(guān)鍵字。下面我說的類的屬性可以是方法,也可以指字段。
在一個(gè)自定義“類”中有中有幾個(gè)地方可以定義屬性。
?? a、函數(shù)名中直接定義。? 如Person.name。在這定義相當(dāng)于類名的屬性。靜態(tài)的,訪問的時(shí)候必須用Person.name來訪問,不能用new Person().name訪問,也訪問不到。
?? b、構(gòu)造函數(shù)的this.中。當(dāng)你用new function()時(shí),這些屬性就是你所持對(duì)象的屬性。用new Person().屬性? 來訪問。
?? c、構(gòu)建好對(duì)象以后,給對(duì)象增加屬性。和構(gòu)造函數(shù)中的屬性使用類似。
?? d、函數(shù)名的prototype中
?? e、父類或Object 的prototype中。
(1)對(duì)象屬性優(yōu)先級(jí)
通過運(yùn)行以下代碼,我們?cè)L問對(duì)象屬性優(yōu)先級(jí)如下:c>b>d>e
c種屬性必須在定義以后訪問才有效。a種屬性實(shí)例訪問不到。
javascrpt語言預(yù)定義的屬性不能用for in 得到。如toString
























(2)prototype屬性是只讀的
看如下代碼,你不要試圖通過變量改變?cè)蛯?duì)象的屬性。你也不可能改變,你只會(huì)通過c模式給對(duì)象增加一個(gè)屬性。
另外原型對(duì)象是所有實(shí)例共享的。理論上也不可以改變。















主要是
d、函數(shù)名的prototype中
e、父類或Object 的prototype中。
這兩種屬性定義
本人正在研究 DWR + prototype,打算用這兩個(gè)ajax framework做項(xiàng)目
希望能多多交流, msn: ycchenbanghong AT hotmail.com
<script>
function A(){};
var a=new A();
alert(a);
Object.prototype.toString=function(){return "Object類"};
alert(a);
A.prototype.toString=function(){return "a類"};
alert(a);
</script>
<script>
function A(){}
var a=new A();
A.prototype.name='hansir';
alert(a.name);
a.name='只讀';
alert(a.name);
</script>
<script>
var a= new Array(1,2,3,4,5);
alert(a);
Object.prototype.toString=function(){return "Object類"};
alert(a);
a.prototype.toString=function(){return "a類"};
alert(a);
</script>
我的理解alert是以toString的方法將里面的對(duì)象表現(xiàn)出來,但是第二個(gè)改變了toString的方法,對(duì)alert沒有影響,后面a沒有prototype的屬性報(bào)錯(cuò)了。對(duì)于這個(gè)應(yīng)該怎么理解呢?
a.prototype.toString=function(){return "a類"};
a是對(duì)象實(shí)例啊
Array.prototype.toString=function(){return "a類"};
================================================
第二個(gè)改變了Object 的toString方法,但是call a的toString的時(shí)候,沒有到Object的toString,到了Array那里就找到了toString的方法,所以雖然改變了Object的toString,結(jié)果仍然不變
忘老大給點(diǎn)指點(diǎn)...