日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

博客園 - 鳥食軒 - JScript中的prototype(原型)屬性研究(1)

 weicat 2006-03-23

JScript中的prototype(原型)屬性研究(1)

    我們知道JScript中對(duì)象的prototype屬性,是用來返回對(duì)象類型原型的引用的。我們使用prototype屬性提供對(duì)象的類的一組基本功能。并且對(duì)象的新實(shí)例會(huì)"繼承"賦予該對(duì)象原型的操作。但是這個(gè)prototype到底是怎么實(shí)現(xiàn)和被管理的呢?

    對(duì)于對(duì)象的prototype屬性的說明,JScript手冊(cè)上如是說:所有 JScript 內(nèi)部對(duì)象都有只讀的 prototype 屬性。可以向其原型中動(dòng)態(tài)添加功能(屬性和方法),但該對(duì)象不能被賦予不同的原型。然而,用戶定義的對(duì)象可以被賦給新的原型。

    下面我們看三個(gè)經(jīng)典的prototype屬性的使用示例。

    1、為腳本環(huán)境內(nèi)建對(duì)象添加方法:

 Array.prototype.max = function()
 {
     
var i, max = this[0];
     
for (i = 1; i < this.length; i++)
     {
       
if (max < this[i])
        max 
= this[i];
     }
    
return max;
 };

    2、為用戶自定義類添加方法:
 function TestObject(name)
 {
     
this.m_Name = name;
 }

 TestObject.prototype.ShowName 
= function()
 {
     alert(
this.m_Name);
 };

    3、更新自定義類的prototype:
 function TestObjectA()
 {
    
this.MethodA = function()
    {
       alert(‘TestObjectA.MethodA()‘);
    }
 }

 
function TestObjectB()
 {
    
this.MethodB = function()
    {
       alert(‘TestObjectB.MethodB()‘);
    }
 }

 TestObjectB.prototype 
= new TestObjectA();

    第三個(gè)很眼熟吧?對(duì)啊,它就是我們前面介紹的原型繼承法呀~~ 不過今天我們不是研究"繼承",之所以可以這樣來實(shí)現(xiàn)一種繼承,只是利用了prototype屬性的一個(gè)副作用而已。

    prototype還有一個(gè)默認(rèn)的屬性:constructor,是用來表示創(chuàng)建對(duì)象的函數(shù)的(即我們OOP里說的構(gòu)造函數(shù))。constructor屬性是所有具有prototype屬性的對(duì)象的成員。它們包括除Global和Math對(duì)象以外的所有JScript內(nèi)部對(duì)象。constructor屬性保存了對(duì)構(gòu)造特定對(duì)象實(shí)例的函數(shù)的引用。

    弄清楚了JScript中prototype屬性怎么使用后,下面我們?cè)賮砩钊氲难芯克?br>

posted on 2005-02-17 22:59 birdshome 閱讀(7091) 評(píng)論(6)  編輯 收藏 收藏至365Key 所屬分類: JScript&DHTML開發(fā)

評(píng)論

# re: JScript中的prototype(原型)屬性研究(1)  回復(fù)   

暈,我正看著下面要怎么寫呢。敲一下回車就提交了。
不好意思,請(qǐng)刪除。
說說對(duì)第三種的看法:

個(gè)人認(rèn)為這樣寫不是很方便。^_^

還不如:

function TestObjectA()
{
this.MethodA = function()
{
alert(‘TestObjectA.MethodA()‘);
}
this.MethodB = function()
{
alert(‘TestObjectB.MethodB()‘);
}
}

可能是我喜歡使用js的動(dòng)態(tài)性的原因吧!
像第三種一定得加上TestObjectB.prototype = new TestObjectA();
這樣很不方便。
我覺得還不如在某些不需要MethodA 的地方加上delete。這樣就很像virtual了。
比如:
<script>
function A(){
this.a = function(){
alert("asdf");
}
this.b = function(){
alert("ttt");
}
}
var a = new A();
for(var item in a) a[item]();
delete a.a;
for(var item in a) a[item]();
</script>
這樣可以想覆蓋就覆蓋,想刪除就刪除,想使用就使用。
2005-02-18 03:43 | 辣妹子

# re: JScript中的prototype(原型)屬性研究(1)  回復(fù)   

這個(gè)主題專講prototype,例三只是說明用戶可以覆蓋自定"類"的prototype而已。謝謝你的意見,不過好像更適合JS的OOP這樣的討論哦。
2005-02-18 10:13 | birdshome

# re: JScript中的prototype(原型)屬性研究(1)  回復(fù)   

"3、更新自定義類的prototype:"
這個(gè)傻了吧? 不是也用了this.methodxx = xx了么?
寫東西要統(tǒng)一
2005-03-13 13:07 | xx

# re: JScript中的prototype(原型)屬性研究(1)  回復(fù)   

@xx
這個(gè)和第2個(gè)一樣嗎?你理解的是什么?
2005-03-13 13:29 | birdshome

# re: JScript中的prototype(原型)屬性研究(1)  回復(fù)   

好好利用prototype是我的目標(biāo)。謝謝樓主的講解,真是令人茅塞頓開!
2005-07-19 19:27 | 軒轅劍

# re: JScript中的prototype(原型)屬性研究(1)  回復(fù)   

謝謝樓主的講解 真透徹
2005-11-23 14:11 | 大飛

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多