欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript Prototype 對(duì)象擴(kuò)展

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

看起來(lái)不錯(cuò),用起來(lái)也不錯(cuò),對(duì)象之間互相沒(méi)有任何干擾,也能正常完成工作,一切看起來(lái)理所當(dāng)然,但是你每次產(chǎn)生一個(gè)新對(duì)象的時(shí)候,腳本引擎都會(huì)給對(duì)象復(fù)制一份屬性和方法,有沒(méi)有覺(jué)得這樣很浪費(fèi)內(nèi)存呢?在客戶端的這種對(duì)象的復(fù)制方式,極其容易造成內(nèi)存泄露,因?yàn)槊看萎a(chǎn)生新的實(shí)例都會(huì)復(fù)制所有的屬性和方法,占用大量的內(nèi)存。
在大型JavaScript應(yīng)用中首先考慮的就是內(nèi)存問(wèn)題。
正確的使用方法是用prototype關(guān)鍵字來(lái)定義一個(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)建的對(duì)象之間可以共用方法,也就是showmsg()函數(shù)只定義一次,其它的對(duì)象共用這一個(gè)方法,而不是復(fù)制出自己的方法。
Javascript中的prototype已經(jīng)說(shuō)完。

看看JavaScript中的對(duì)象擴(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]);
}

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

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

一個(gè)更簡(jiǎn)單而有用的方法,是遍歷一個(gè)對(duì)象的所有屬性和方法來(lái)快速了解一個(gè)對(duì)象的內(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)文章

  • uniapp中canvas繪制圖片內(nèi)容空白報(bào)錯(cuò)的原因及解決

    uniapp中canvas繪制圖片內(nèi)容空白報(bào)錯(cuò)的原因及解決

    最近有個(gè)需求就是要用canvas畫(huà)個(gè)分享的海報(bào),所以這里總結(jié)下,這篇文章主要給大家介紹了關(guān)于uniapp中canvas繪制圖片內(nèi)容空白報(bào)錯(cuò)的原因及解決方法,需要的朋友可以參考下
    2023-09-09
  • JS實(shí)現(xiàn)帶有3D立體感的銀灰色豎排折疊菜單代碼

    JS實(shí)現(xiàn)帶有3D立體感的銀灰色豎排折疊菜單代碼

    這篇文章主要介紹了JS實(shí)現(xiàn)帶有3D立體感的銀灰色豎排折疊菜單代碼,可實(shí)現(xiàn)基本的JS響應(yīng)鼠標(biāo)事件動(dòng)態(tài)展開(kāi)與折疊菜單欄的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • js實(shí)現(xiàn)滑動(dòng)到頁(yè)面底部自動(dòng)加載更多功能

    js實(shí)現(xiàn)滑動(dòng)到頁(yè)面底部自動(dòng)加載更多功能

    本文主要分享了js實(shí)現(xiàn)滑動(dòng)到頁(yè)面底部自動(dòng)加載更多功能的代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • js實(shí)現(xiàn)window.open不被攔截的解決方法匯總

    js實(shí)現(xiàn)window.open不被攔截的解決方法匯總

    這篇文章主要介紹了js實(shí)現(xiàn)window.open不被攔截的解決方法,實(shí)例匯總了常用的不被攔截的解決方法,需要的朋友可以參考下
    2014-10-10
  • JavaScript使用表單元素驗(yàn)證表單的示例代碼

    JavaScript使用表單元素驗(yàn)證表單的示例代碼

    這篇文章主要介紹了JavaScript使用表單元素驗(yàn)證表單的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • js和html5實(shí)現(xiàn)手機(jī)端刮刮卡抽獎(jiǎng)效果完美兼容android/IOS

    js和html5實(shí)現(xiàn)手機(jī)端刮刮卡抽獎(jiǎng)效果完美兼容android/IOS

    手機(jī)完美支持html5,所以如果手機(jī)端想要做個(gè)抽獎(jiǎng)模塊的話,用刮刮卡抽獎(jiǎng)效果,相信這個(gè)互動(dòng)體驗(yàn)是非常棒的,本人親自完成,有錯(cuò)誤請(qǐng)大家指出
    2013-11-11
  • JS數(shù)組方法push()、pop()用法實(shí)例分析

    JS數(shù)組方法push()、pop()用法實(shí)例分析

    這篇文章主要介紹了JS數(shù)組方法push()、pop()用法,結(jié)合實(shí)例形式分析了JavaScript數(shù)組push()與pop()方法基本功能、原理、使用方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • JS 圖片壓縮原理與實(shí)現(xiàn)方法詳解

    JS 圖片壓縮原理與實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了JS 圖片壓縮原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了JS 圖片壓縮原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • jsp 自動(dòng)編譯機(jī)制詳細(xì)介紹

    jsp 自動(dòng)編譯機(jī)制詳細(xì)介紹

    這篇文章主要介紹了 Jasper的自動(dòng)檢測(cè)實(shí)現(xiàn)的機(jī)制比較簡(jiǎn)單,依靠某后臺(tái)線程不斷檢測(cè)JSP文件與編譯后的class文件的最后修改時(shí)間是否相同,若相同則認(rèn)為沒(méi)有改動(dòng),但倘若不同則需要重新編譯,需要的朋友可以參考下
    2016-12-12
  • js使彈層下面的body禁止?jié)L動(dòng)

    js使彈層下面的body禁止?jié)L動(dòng)

    這篇文章介紹了js使彈層下面body禁止?jié)L動(dòng)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論