JavaScript 原型學習總結

來源:互聯網
上載者:User

每個對像都有一個隱慝的屬性用於指向到它的父對像(構造對像的函數)的原型(這裡稱為父原型或隱式原型),並從中繼承它的屬性和方法 [函數對像除了父原型引用外,還有一個顯式的原型引用],在一般情況下,對像的父原型是不可以訪問的,而函數對像的顯式原型可以通過FunctionName.prototype進行訪問 [在FireFox中你可以通過對像的__proto__屬性來訪問對像的父原型]   

  這個原型屬性本身又是一個Object類型的對像,因此可以給這個原型屬性添加任意的屬性和方法 讓執行個體對像來繼承它們

如: 一個String類型的對像的原型為String.prototype,如果我們想要給String類型的對像添加一些自訂的方法,那我們可以這樣來實現(這裡以添加一個類式VBscript中的trim方法為例) 複製代碼 代碼如下:String.prototype.trim=function(){
return this.replace(/^\s*|\s*$/g,"")
}
// " jiangsk540 ".trim();//return "jiagnsk540"

原型除了提供以上的特性之外,它還提供了一群同類執行個體對像共用屬性和方法的機制 [也就相當於靜態屬性或靜態函數,無論用建構函式建立了多少個執行個體對像,在原型上定義的屬性和方法從頭到尾只定義了一次,所有執行個體對像都共用使用這一個屬性或方法 但並非和C++或JAVA的靜態屬性或靜態函數的概念相同] 複製代碼 代碼如下:function Class1(name){
this.name = name;
}
Class1.prototype.show=function(){
alert("name="+this.name);
}
var m1 = new Class1("jiangsk540");
var m2 = new Class1("毛獅子");
alert(m1.show===m2.show);//顯示 true

動態給建構函式原型添加的屬性或方法即可被先前建立的對像立即調用
複製代碼 代碼如下:function Class1(name){
this.name = name;
}
Class1.prototype.show=function(){
alert("name="+this.name);
}
var m1 = new Class1("jiangsk540");
Class1.prototype.say=function(){
alert("Hi");
}
m1.say()//調用成功
/*
注意:只有為建構函式的原型添加的屬性或方法才能被已經建立的對像立即調用
如果是改變建構函式原型的引用那麼就不能被已經建立的對像立即調用
*/
Class1.prototype={newP:"jiangsk540"};
alert(m1.newP)//undefined

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.