JavaScript 原型學(xué)習(xí)總結(jié)
更新時(shí)間:2010年10月29日 21:04:04 作者:
每個(gè)對(duì)像都有一個(gè)隱慝的屬性用于指向到它的父對(duì)像(構(gòu)造對(duì)像的函數(shù))的原型(這里稱為父原型或隱式原型),并從中繼承它的屬性和方法
每個(gè)對(duì)像都有一個(gè)隱慝的屬性用于指向到它的父對(duì)像(構(gòu)造對(duì)像的函數(shù))的原型(這里稱為父原型或隱式原型),并從中繼承它的屬性和方法 [函數(shù)對(duì)像除了父原型引用外,還有一個(gè)顯式的原型引用],在一般情況下,對(duì)像的父原型是不可以訪問(wèn)的,而函數(shù)對(duì)像的顯式原型可以通過(guò)FunctionName.prototype進(jìn)行訪問(wèn) [在FireFox中你可以通過(guò)對(duì)像的__proto__屬性來(lái)訪問(wèn)對(duì)像的父原型]
這個(gè)原型屬性本身又是一個(gè)Object類型的對(duì)像,因此可以給這個(gè)原型屬性添加任意的屬性和方法 讓實(shí)例對(duì)像來(lái)繼承它們
如: 一個(gè)String類型的對(duì)像的原型為String.prototype,如果我們想要給String類型的對(duì)像添加一些自定義的方法,那我們可以這樣來(lái)實(shí)現(xiàn)(這里以添加一個(gè)類式VBscript中的trim方法為例)
String.prototype.trim=function(){
return this.replace(/^\s*|\s*$/g,"")
}
// " jiangsk540 ".trim();//return "jiagnsk540"
原型除了提供以上的特性之外,它還提供了一群同類實(shí)例對(duì)像共享屬性和方法的機(jī)制 [也就相當(dāng)于靜態(tài)屬性或靜態(tài)函數(shù),無(wú)論用構(gòu)造函數(shù)創(chuàng)建了多少個(gè)實(shí)例對(duì)像,在原型上定義的屬性和方法從頭到尾只定義了一次,所有實(shí)例對(duì)像都共享使用這一個(gè)屬性或方法 但并非和C++或JAVA的靜態(tài)屬性或靜態(tài)函數(shù)的概念相同]
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
動(dòng)態(tài)給構(gòu)造函數(shù)原型添加的屬性或方法即可被先前建立的對(duì)像立即調(diào)用
如
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()//調(diào)用成功
/*
注意:只有為構(gòu)造函數(shù)的原型添加的屬性或方法才能被已經(jīng)創(chuàng)建的對(duì)像立即調(diào)用
如果是改變構(gòu)造函數(shù)原型的引用那么就不能被已經(jīng)創(chuàng)建的對(duì)像立即調(diào)用
*/
Class1.prototype={newP:"jiangsk540"};
alert(m1.newP)//undefined
這個(gè)原型屬性本身又是一個(gè)Object類型的對(duì)像,因此可以給這個(gè)原型屬性添加任意的屬性和方法 讓實(shí)例對(duì)像來(lái)繼承它們
如: 一個(gè)String類型的對(duì)像的原型為String.prototype,如果我們想要給String類型的對(duì)像添加一些自定義的方法,那我們可以這樣來(lái)實(shí)現(xiàn)(這里以添加一個(gè)類式VBscript中的trim方法為例)
復(fù)制代碼 代碼如下:
String.prototype.trim=function(){
return this.replace(/^\s*|\s*$/g,"")
}
// " jiangsk540 ".trim();//return "jiagnsk540"
原型除了提供以上的特性之外,它還提供了一群同類實(shí)例對(duì)像共享屬性和方法的機(jī)制 [也就相當(dāng)于靜態(tài)屬性或靜態(tài)函數(shù),無(wú)論用構(gòu)造函數(shù)創(chuàng)建了多少個(gè)實(shí)例對(duì)像,在原型上定義的屬性和方法從頭到尾只定義了一次,所有實(shí)例對(duì)像都共享使用這一個(gè)屬性或方法 但并非和C++或JAVA的靜態(tài)屬性或靜態(tài)函數(shù)的概念相同]
復(fù)制代碼 代碼如下:
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
動(dòng)態(tài)給構(gòu)造函數(shù)原型添加的屬性或方法即可被先前建立的對(duì)像立即調(diào)用
如
復(fù)制代碼 代碼如下:
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()//調(diào)用成功
/*
注意:只有為構(gòu)造函數(shù)的原型添加的屬性或方法才能被已經(jīng)創(chuàng)建的對(duì)像立即調(diào)用
如果是改變構(gòu)造函數(shù)原型的引用那么就不能被已經(jīng)創(chuàng)建的對(duì)像立即調(diào)用
*/
Class1.prototype={newP:"jiangsk540"};
alert(m1.newP)//undefined
相關(guān)文章
JSONP獲取Twitter和Facebook文章數(shù)的具體步驟
這篇文章主要介紹了JSONP獲取Twitter和Facebook文章數(shù)的方法,需要的朋友可以參考下2014-02-02jquery 滾動(dòng)條事件簡(jiǎn)單實(shí)例
這篇文章介紹了jquery滾動(dòng)條事件的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-07-07JavaScript編程的10個(gè)實(shí)用小技巧
盡管我使用Javascript來(lái)做開(kāi)發(fā)有很多年了,但它常有一些讓我很驚訝的小特性。對(duì)于我來(lái)說(shuō),Javascript是需要持續(xù)不斷的學(xué)習(xí)的。2014-04-04JS實(shí)現(xiàn)商城秒殺倒計(jì)時(shí)功能(動(dòng)態(tài)設(shè)置秒殺時(shí)間)
這篇文章主要介紹了JS實(shí)現(xiàn)商城秒殺倒計(jì)時(shí)功能(動(dòng)態(tài)設(shè)置秒殺時(shí)間),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12js使用html()或text()方法獲取設(shè)置p標(biāo)簽的顯示的值
html()方法可以用來(lái)讀取或者設(shè)置某個(gè)元素中的HTML內(nèi)容,text()方法可以用來(lái)讀取或者沒(méi)置某個(gè)元素中的文本內(nèi)容2014-08-08小程序websocket心跳庫(kù)(websocket-heartbeat-miniprogram)
這篇文章主要介紹了小程序websocket心跳庫(kù)(websocket-heartbeat-miniprogram),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02