天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

javascript Prototype 對象擴展

Javascript當然也不例外,可是關于對象的引用問題,你考慮過么?通常的做法是一系列對象共享類的方法,而不是為每個對象復制一份函數。下面看看為每個對象復制一份函數的做法。
復制代碼 代碼如下:
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());

看起來不錯,用起來也不錯,對象之間互相沒有任何干擾,也能正常完成工作,一切看起來理所當然,但是你每次產生一個新對象的時候,腳本引擎都會給對象復制一份屬性和方法,有沒有覺得這樣很浪費內存呢?在客戶端的這種對象的復制方式,極其容易造成內存泄露,因為每次產生新的實例都會復制所有的屬性和方法,占用大量的內存。
在大型JavaScript應用中首先考慮的就是內存問題。
正確的使用方法是用prototype關鍵字來定義一個類的方法或者屬性
復制代碼 代碼如下:
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);

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

看看JavaScript中的對象擴展
復制代碼 代碼如下:
function rand(x)
{
return Math.ceil(Math.random()*x);
}
生成隨機數組的一個擴展方法
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]);
}

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

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

一個更簡單而有用的方法,是遍歷一個對象的所有屬性和方法來快速了解一個對象的內部狀態:
復制代碼 代碼如下:
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]);
}

JavaScript技術javascript Prototype 對象擴展,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人精品久久一区二区三区 | 97国内精品久久久久久久影视 | 92午夜理论第1000集 app | 免费看大黄高清网站视频在线 | 人人爽久久久噜噜噜丁香AV | 无码天堂亚洲内射精品课堂 | 2022精品福利在线小视频 | 大学生第一次破女在线观看 | 麻豆精品2021最新 | 国产精品国产三级国产专区53 | 色宅男午夜电影网站 | av视频在线免播放观看 | 欧美 亚洲 有码中文字幕 | 欧美阿v在线天堂 | 在线播放真实国产乱子伦 | 印度12 13free | 久久99蜜桃精品麻豆 | 飘雪在线观看免费高清完整版韩国 | a一级一片免费观看视频 | 天天躁夜夜踩很很踩2022 | 久久女婷五月综合色啪 | 国产精品高清在线观看93 | 永久免费精品精品永久-夜色 | 欧美黑人巨大性极品hd欧 | 最近中文字幕在线中文高清版 | 高hnp全肉 | 免费国产综合视频在线看 | 国产美女裸身网站免费观看视频 | 一边亲着一面膜下的免费过程 | 一区二区三区国产 | 亚洲国产在线观看免费视频 | 亚洲AV美女成人网站P站 | 中文字幕日本一区 | www.色小姐| 精品精品国产自在现拍 | 国产精品嫩草99AV在线 | 丰满少妇67194视频 | 清冷受被CAO的合不拢 | 日日干夜夜啪蕉视频 | 精品国产乱码久久久久久下载 | 久久精品视在线观看85 |