最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript Prototype 對象擴(kuò)展

 更新時(shí)間:2009年05月15日 12:35:57   作者:  
從對象創(chuàng)建一個(gè)實(shí)例說起來貌似是很簡單的東西,是啊,基本在所有的語言中,都是用new關(guān)鍵字來創(chuàng)建實(shí)例的
Javascript當(dāng)然也不例外,可是關(guān)于對象的引用問題,你考慮過么?通常的做法是一系列對象共享類的方法,而不是為每個(gè)對象復(fù)制一份函數(shù)。下面看看為每個(gè)對象復(fù)制一份函數(shù)的做法。
復(fù)制代碼 代碼如下:

var myobject=function(param1,param2)
{
this.name=param1;
this.age=param2;
this.showmsg=function()
{
alert("name:"+this.name+"\n"+"age:"+this.age);
}
}
var objectone=new myobject('liu',20);
alert(objectone.name); //liu
var objecttwo=new myobject('lin',20);
alert(objecttwo.name); //lin
alert(objecttwo.showmsg());
var objectthree=new myobject('lhking',22);
alert(objectthree.showmsg());

看起來不錯(cuò),用起來也不錯(cuò),對象之間互相沒有任何干擾,也能正常完成工作,一切看起來理所當(dāng)然,但是你每次產(chǎn)生一個(gè)新對象的時(shí)候,腳本引擎都會給對象復(fù)制一份屬性和方法,有沒有覺得這樣很浪費(fèi)內(nèi)存呢?在客戶端的這種對象的復(fù)制方式,極其容易造成內(nèi)存泄露,因?yàn)槊看萎a(chǎn)生新的實(shí)例都會復(fù)制所有的屬性和方法,占用大量的內(nèi)存。
在大型JavaScript應(yīng)用中首先考慮的就是內(nèi)存問題。
正確的使用方法是用prototype關(guān)鍵字來定義一個(gè)類的方法或者屬性
復(fù)制代碼 代碼如下:

var myobject=function(param1,param2)
{
this.name=param1;
this.age=param2;
myobject.prototype.showmsg=function()
{
alert("name:"+this.name+"\n"+"age:"+this.age);
}
}
var objectone=new myobject('liu',20);
alert(objectone.name);
var objecttwo=new myobject('lin',20);
alert(objecttwo.name);
alert(objecttwo.showmsg());
var objectthree=new myobject('lhking',22);
alert(objectthree.showmsg);

這樣的話,你創(chuàng)建的對象之間可以共用方法,也就是showmsg()函數(shù)只定義一次,其它的對象共用這一個(gè)方法,而不是復(fù)制出自己的方法。
Javascript中的prototype已經(jīng)說完。

看看JavaScript中的對象擴(kuò)展
復(fù)制代碼 代碼如下:

function rand(x)
{
return Math.ceil(Math.random()*x);
}
生成隨機(jī)數(shù)組的一個(gè)擴(kuò)展方法
Array.prototype.random=function()
{
for(var i=(this.length-1);i>1;i--)
{
var j=rand(this.length-1);
var cache=this[i];
this[i]=this[j];
this[j]=cache;
}
}
var array=new Array("1","2","3","4","5");
for(var a in array)
{
alert(array[a]);
}
array.random();
for(var b in array)
{
alert(array[b]);
}

再看看對象反射
反射是一種對象的機(jī)制,它允許你在完全不了解對象的情況下了解它的屬性和方法,通常情況下,程序員對于自己所操縱的對象是如何組成的是非常了解的,但是在某些特殊情況下使用某個(gè)其他人寫的復(fù)雜的對象的時(shí)候,我們需要快速了解這個(gè)對象的屬性和方法,就需要用到反射的機(jī)制,當(dāng)然反射的應(yīng)用并不是局限于此,這里只是介紹反射在Javascript中的使用方法.

首先我們可能想知道在某個(gè)對象中是否存在一個(gè)特定的屬性或者方法,這時(shí)候我們可以地測試它:
if(typeof(myobject.someproperty)!="undefined")
{
}
在Javascript中如果沒有定義一個(gè)對象或者變量的話,它總是返回undefined類型.
也可以用其他的內(nèi)建類來縮小測試范圍:
if(myobject instanceof Object)
{
}
instanceof 是用來測試內(nèi)建類或者自定義類的操作符,內(nèi)建類指Array,String,Date,Number,Math,RegExp,Boolean,Function之類的內(nèi)建類.例如:Function和Array都是繼承自O(shè)bject類的,所以如果你在代碼中如果測試某個(gè)Array對象的話,如果你先測試它是否是Object,將返回true,如果測試它是否是Array的話,它也會返回true。

一個(gè)更簡單而有用的方法,是遍歷一個(gè)對象的所有屬性和方法來快速了解一個(gè)對象的內(nèi)部狀態(tài):
復(fù)制代碼 代碼如下:

function myobject(){
this.name="name";
this.age="age";
this.sex="sex";
this.func=function(){
}
}
var myobj=new myobject();
for(var i in myobj){
alert(myobj[i]);
}

相關(guān)文章

  • 詳解JavaScript的原型與原型鏈

    詳解JavaScript的原型與原型鏈

    這篇文章主要為大家詳細(xì)介紹了JavaScript原型與原型鏈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • js前端登錄加密解決方案

    js前端登錄加密解決方案

    項(xiàng)目中需要前端書寫登錄頁面,用戶輸入賬號密碼,本文主要介紹了js前端登錄加密解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Js判斷兩個(gè)數(shù)組是否相等的幾種常見場景

    Js判斷兩個(gè)數(shù)組是否相等的幾種常見場景

    無論是在開發(fā)中還是面試時(shí),在js中判斷變量是否相等,都是一個(gè)比較常見的問題,這篇文章主要給大家介紹了關(guān)于Js判斷兩個(gè)數(shù)組是否相等的幾種常見場景,需要的朋友可以參考下
    2024-07-07
  • 微信小程序單選框組應(yīng)用詳解

    微信小程序單選框組應(yīng)用詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序單選框組應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Webwork 實(shí)現(xiàn)文件上傳下載代碼詳解

    Webwork 實(shí)現(xiàn)文件上傳下載代碼詳解

    WebWork 當(dāng)然也提供了很友好的攔截器來實(shí)現(xiàn)對文件的上傳,讓我們可以專注與業(yè)務(wù)邏輯的設(shè)計(jì)和實(shí)現(xiàn),在實(shí)現(xiàn)上傳和下載時(shí)順便關(guān)注了下框架上傳下載的實(shí)現(xiàn)
    2016-02-02
  • 教大家輕松制作Bootstrap漂亮表格(table)

    教大家輕松制作Bootstrap漂亮表格(table)

    這篇文章主要為大家詳細(xì)介紹了Bootstrap輕松制作漂亮表格table的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 如何在uniapp中獲取可視區(qū)域的高度(uni.getSystemInfo)

    如何在uniapp中獲取可視區(qū)域的高度(uni.getSystemInfo)

    這篇文章主要給大家介紹了關(guān)于如何在uniapp中獲取可視區(qū)域的高度(uni.getSystemInfo)的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用uniapp具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04
  • js Event對象的5種坐標(biāo)

    js Event對象的5種坐標(biāo)

    使用鼠標(biāo)事件經(jīng)常碰到這樣的需求,比如獲取鼠標(biāo)相對于事件源的位置,鼠標(biāo)相對于事件源對象父元素的位置
    2011-09-09
  • js鍵盤事件keydown事件、防止重復(fù)觸發(fā)以及組合鍵的配合使用

    js鍵盤事件keydown事件、防止重復(fù)觸發(fā)以及組合鍵的配合使用

    這篇文章主要給大家介紹了關(guān)于js鍵盤事件keydown事件、防止重復(fù)觸發(fā)以及組合鍵配合使用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-04-04
  • JavaScript圖片的Base64編碼以及轉(zhuǎn)換詳解

    JavaScript圖片的Base64編碼以及轉(zhuǎn)換詳解

    現(xiàn)在網(wǎng)站為了提升用戶的瀏覽體驗(yàn)越來越多的使用了圖片,而這些圖片通常以 Base64 的形式存儲和加載,下面這篇文章主要給大家介紹了關(guān)于JavaScript圖片的Base64編碼以及轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下
    2022-07-07

最新評論

微山县| 保康县| 永和县| 临武县| 怀仁县| 张家港市| 屏东市| 长垣县| 巴南区| 襄汾县| 莫力| 景德镇市| 平乐县| 阳山县| 青田县| 邢台县| 江孜县| 安义县| 芮城县| 邛崃市| 开封市| 台东县| 遂平县| 花莲县| 枣阳市| 桃园市| 象山县| 开远市| 繁峙县| 通城县| 咸阳市| 嘉禾县| 丘北县| 科尔| 贵溪市| 镇原县| 龙南县| 松滋市| 镇雄县| 五原县| 栖霞市|