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

javascript 對象定義方法 簡單易學

工廠模式:
初級開發者可能會這樣定義對象:
var obj = new Object();
obj.name = "hero";
obj.showName=function (){alert(this.name);}
這里存在一個問題就是如果我們要在多個地方用obj對象,可能在程序中類似的代碼要寫好多遍,于是產生了工廠方法
function createObj()
{
var obj = new Object();
obj.name="hero";
obj.showName=function (){alert(this.name);}
return obj;
}
var obj1 = createObj();
var obj2 = createObj();
和另外一種方法 構造函數法
function obj (name)
{
this.name=name;
this.showName= function (){alert(this.name);}
}
把生成對象的代碼封裝起來,避免出現重復new的代碼,當然也可以進一步改進,就是createObj傳遞一些參數,而不是給obj賦默認固定值:
function createObj(name)
{
var obj = new Object();
obj.name=name;
obj.showName=function (){alert(this.name);}
return obj;
}
var obj1 = createObj("hero");
var o'b'j2=createObj("dby");
但是存在一個問題,就是我們每次調用createObj函數都會創建新的函數 showName.意味著每個對象都有自己版本的showName,所以要改進避開這個問題.
function showName()
{
alert(this.name)
}
function createObj(name)
{
var obj = new Object();
obj.name=name;
obj.showName=showName;
return obj;
}
這樣就解決了 重復創建函數的問題, 哈哈哈,大功告成 .
原型方式:
主要是利用對象的prototype屬性.
function obj()
{}
obj.prototype.name="hero";
obj.prototype.showName=function()
{
alert(this.name);
}
看起來似乎比剛才的工廠還完美,但是 有一個問題,該函數沒有構造函數,屬性是通過prototype指定的,這一點在實際應用中很讓人頭疼,所有的實例的屬性都一樣實在是不能讓人接受.尤其還存在一個安全隱患,那就是當對象中有引用時,例如 加上這樣一段
obj.prototype.nameArray = new Array("hero","dby");
然后
obj1 = new obj();
obj2 = new obj();
obj1.nameArray.push("lxw");
在obj2的nameArray中將也會看到這個屬性,因為兩個對象的nameArray指向的是同一個引用.
所以這種方式并不是理想方法.
需要 改進
結合構造函數,在構造函數定義屬性,用原型定義方法
例如
fuction obj(name)
{
this.name = name
this.nameArray = new Array("hero","dby");
}
obj.prototype.showName = function(){alert(this.name)}
所有的非函數屬性都在構造函數里創建,函數屬性用prototype方式創建,obj1 中改變nameArray的值,不會影響到obj2對象的nameArray的值, 而且只有一個showName函數,所以沒有內存浪費.
基本上完美了,剩下的基本都是一下其他的修飾了.有興趣的可以自己改著玩玩.
筆者在這里加上一個單例 玩了一下:
function obj (name)
{
this.name = name;
this.nameArray=new Array("hero","dby");
if(typeof obj._initialized=='undefined')
{
obj.prototype.showName=function(){alert(this.name);}
obj._initialized="true";
}
}
其實不算是單例, 只不過是在構造對象的時候,先判斷一個屬性是否被定義,如果沒有定義,那么用原型方法繼續定義對象,如果已經定義了屬性,那么就不在重復定義函數了. 該prototype方法只被創建一次,病賦值一次.
又差不多完美了,大功告成 .
這是個人的理解,,希望對大家有幫助,不完善的地方請qq聯系,及時改正。
這是一個完整的實例:
function Rectangle(name,color,width,heigth){
this.name=name;
this.color=color;
this.width=width;
this.heigth=heigth;
}
Rectangle.prototype.area=function(){
return this.width*this.heigth
}
Rectangle.prototype.show=function(){
document.write(this.name+" "+this.color+" "+this.width+" "+this.heigth+"<br/>");
document.write(this.area());
}
var obj1= new Rectangle("Rectangle","red",15,20);
obj1.show();

JavaScript技術javascript 對象定義方法 簡單易學,轉載需保留來源!

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

主站蜘蛛池模板: 久久成人国产精品一区二区 | 四川老师边上网课边被啪视频 | 自拍偷拍12p | 小鸟酱喷水 | brazzers情欲狂欢 | 欧美日韩无套内射另类 | 影音先锋男人资源813. | 天天操狠狠操夜夜操 | 老师的快感电影完整版 | 98久久人妻无码精品系列蜜桃 | 午夜在线观看免费观看 视频 | 胸大的姑娘中文字幕视频 | 伦理片在线线手机版韩国免费观看 | 91九色视频在线观看 | YY8848高清私人影院 | 5g天天影院天天看天天爽 | 亚洲AV无码国产精品色午夜情 | 熟女人妻-蜜臀AV-首页 | 日日做夜夜欢狠狠免费软件 | 校花爽好大快深点h | 色男人的天堂久久综合 | 忘忧草研究所 麻豆 | 成人在线视频在线观看 | 午夜阳光影院在线观看视频 | 国产乱人视频在线观看 | 亚洲国产成人精品无码区APP | 樱桃视频影院在线播放 | 国语自产一区第二页 | 美女与男人对肌免费网站 | 国内精品久久久久影院男同志 | 老司机亚洲精品影院 | 风车动漫(p)_在线观看官网 | 日本久久中文字幕 | 北岛玲手机在线观看视频观看 | 香港论理午夜电影网 | 妻子撸av中文字幕 | 三级网址在线观看 | 男人一进一出桶女人视频 | 同居了嫂子在线观看 | 国产 亚洲 另类 欧美 在线 | 学校捏奶揉下面污文h |