自知其無知
不懂,慢慢懂。
BlogJava
首頁
新隨筆
新文章
聯(lián)系
聚合
管理
posts - 2,comments - 2,trackbacks - 0
<
2025年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
1. 我要讀書。
2. 路.慢慢走
莫心急。
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
給我留言
查看公開留言
查看私人留言
隨筆檔案
(2)
2009年11月 (2)
文章分類
(109)
Ajax(3)
Java(2)
Java Web(23)
JavaScript(36)
My SQL
Oracle
SQL Server(1)
Tomcat(1)
人生感悟(17)
生活常識(shí)(1)
電腦常識(shí)(24)
設(shè)計(jì)與思考(1)
文章檔案
(89)
2008年12月 (89)
搜索
最新評(píng)論
1.?re: 仿 hao123 的郵箱登陸
很好
--王立芹
2.?re: 比較經(jīng)典的一個(gè)問題。 - 局域網(wǎng)內(nèi)設(shè)置不同用戶對(duì)不同文件夾的訪問權(quán)限
你好 我也需要這方面的資料 我弄了很久都沒弄好,可不可以幫我弄下!!
我qq 46452150 希望聯(lián)系。
ps: 我單位的情況和你的一樣
--11
閱讀排行榜
1.?Pic(282)
2.?love(280)
評(píng)論排行榜
1.?love(0)
2.?Pic(0)
JS 創(chuàng)建對(duì)象的幾種方式
<
script type
=
"
text/javascript
"
>
/**/
/*
創(chuàng)建對(duì)象的幾種方式:
*/
//
1. 工廠方法:能創(chuàng)建并返回特定類型對(duì)象的工廠函數(shù)(factory function).
function
createCar(sColor)
{
var
car
=
new
Object();
//
或者 var car = new Object ;
//
對(duì)象屬性
car.color
=
sColor ;
//
對(duì)象方法
car.showColor
=
function
()
{
alert(
123
);
}
;
//
記住,這里一定要用 ; 表示結(jié)束
return
car;
//
這里是 return car ; 而不是 return this.car ; 因?yàn)?nbsp;this.car 為 undefined
}
/**/
/*
調(diào)用此函數(shù)時(shí),將創(chuàng)建對(duì)象,并賦予它所有必要的屬性,使用此方法創(chuàng)建 car 對(duì)象的兩個(gè)版本,
( oCar1 和 oCar2 ) ,他們的屬性完全一樣。
使用此方法存在的問題:
1. 語義上看起來不像使用帶有構(gòu)造函數(shù)的 new 運(yùn)算那么正規(guī).
2. 使用這種方式必須創(chuàng)建對(duì)象的方法。每次調(diào)用 createCar(),都要?jiǎng)?chuàng)建 showColor(),意味著每一個(gè)對(duì)象
都有自己的 showColor 版本,事實(shí)上,每一個(gè)對(duì)象都共享了是同一個(gè)函數(shù).
有些開發(fā)者在工廠函數(shù)外定義對(duì)象的方法,然后通過屬性指向該方法。從而避免這個(gè)問題:
*/
function
createCar2(sColor)
{
var
car
=
new
Object();
car.color
=
sColor ;
car.showColor
=
showColor ;
return
car ;
}
function
showColor()
{
alert(
this
.color);
}
var
oCar1
=
createCar('red');
var
oCar2
=
createCar('yellow');
var
oCar3
=
createCar2('blue');
var
oCar4
=
createCar2('black');
/**/
/*
注意這兩個(gè)對(duì)象(oCar3 和 oCar4 ) 調(diào)用showColor 屬性的方式,雖然美其名曰是“屬性”,其實(shí)還是方法!!!
所以是 oCar3.showColor(); 而不是 oCar3.showColor ;
*/
oCar3.showColor();
oCar4.showColor();
/**/
/*
在這段重寫的代碼中,在函數(shù) createCar2() 前定義了函數(shù)showColor(), 在 createCar2() 內(nèi)部,賦予對(duì)象一個(gè)已經(jīng)
指向已經(jīng)存在的 showColor() 函數(shù)的指針,從功能上講,這樣解決了重復(fù)創(chuàng)建對(duì)象的問題,但該函數(shù)看起來不像對(duì)象
的方法。
所有這些問題引起了開發(fā)者的定義構(gòu)造函數(shù)的出現(xiàn)
*/
//
2. 構(gòu)造函數(shù)方式
function
Car(sColor)
{
this
.color
=
sColor;
this
.showColor
=
function
()
{
alert(
this
.color);
}
;
}
var
car1
=
new
Car('red');
car1.showColor();
/**/
/*
你可能已經(jīng)注意到第一個(gè)的差別了,在構(gòu)造函數(shù)內(nèi)部無創(chuàng)建對(duì)象,而是使用 this 關(guān)鍵字,使用 new
運(yùn)算符調(diào)用構(gòu)造函數(shù),在執(zhí)行第一行代碼前先創(chuàng)建一個(gè)對(duì)象,只有用 this 才能訪問該對(duì)象。然后可以
直接賦予 this 屬性,默認(rèn)情況下是構(gòu)造函數(shù)的返回值,(不必明確使用 return 運(yùn)算符)。
這種方式在管理函數(shù)方面與工廠方法一樣都存在相同的問題.
*/
//
3. 原型方式
function
PCar()
{
}
PCar.prototype.color
=
"
blue
"
;
var
pcar1
=
new
PCar();
/**/
/*
調(diào)用 new Car()時(shí),原型的所有屬性都被立即賦予要?jiǎng)?chuàng)建的對(duì)象,意味著所有的 PCar 實(shí)例存放的是指向
showColor() 函數(shù)的指針,從語義看起來都屬于一個(gè)對(duì)象,因此解決了前面兩種方式存在的問題。此外使用
該方法,還能使用 instanceof 運(yùn)算符檢查給定變量指向的對(duì)象類型。因此下面的代碼將輸出 true:
*/
alert(pcar1
instanceof
PCar);
//
output "true"
/**/
/*
這個(gè)方法看起來不錯(cuò),遺憾的是,它并不盡人意。
1. 首先這個(gè)構(gòu)造函數(shù)沒有參數(shù)。使用原型方式時(shí),不能給構(gòu)造函數(shù)傳遞參數(shù)初始化屬性值,因?yàn)?nbsp;pcar1 和
pcar2 的屬性都等于 "blue"
2. 真正的問題出現(xiàn)在屬性指向的對(duì)象,而不是函數(shù)時(shí),函數(shù)共享不會(huì)造成任何問題,但是對(duì)象卻是很少被多個(gè)
實(shí)例共享的。
*/
//
4. 混合的構(gòu)造函數(shù)/原型方式(推薦)
/**/
/*
聯(lián)合使用構(gòu)造函數(shù)和原型方式,就可像使用其他程序設(shè)計(jì)語言一樣創(chuàng)建對(duì)象,這種概念非常簡單,即用構(gòu)造函數(shù)
定義對(duì)象的所有非函數(shù)屬性,用原型方式定義對(duì)象的函數(shù)屬性(方法)。
*/
function
hCar(sColor)
{
this
.color
=
sColor;
this
.drivers
=
new
Array('Mike','Sue');
}
hCar.prototype.showColor
=
function
()
{
alert(
this
.color);
}
var
hcar1
=
new
hCar('y color');
var
hcar2
=
new
hCar('r color');
hcar1.drivers.push('Matt');
alert(hcar1.drivers);
//
output "Mike,Sue,Matt"
alert(hcar2.drivers);
//
output "Mike,Sue"
//
5. 動(dòng)態(tài)原型方式 (推薦)
/**/
/*
對(duì)于習(xí)慣使用其他開發(fā)語言的開發(fā)者來說,使用混合構(gòu)造函數(shù)/原型方式感覺不那么和諧。批評(píng)構(gòu)造函數(shù)/原型方式的人
認(rèn)為,在構(gòu)造函數(shù)內(nèi)找屬性,在外部找方法的做法不合理。所以他們?cè)O(shè)計(jì)了動(dòng)態(tài)原型方式,以供更友好的編碼風(fēng)格。
動(dòng)態(tài)原型方式的基本想法與混合構(gòu)造函數(shù)/原型方式 相同,即在構(gòu)造函數(shù)內(nèi)定義非函數(shù)的屬性,而函數(shù)的屬性則利用
原型屬性定義。唯一的區(qū)別是賦予對(duì)象方法的位置。下面是使用動(dòng)態(tài)原型方法重寫的 Car 類:
*/
function
DCar(sColor)
{
this
.color
=
sColor;
this
.drivers
=
new
Array('Mike','Sue');
if
(
typeof
DCar._initialized
==
'undefined')
{
DCar.prototype.showColor
=
function
()
{
alert(
this
.color);
}
}
DCar._initialized
=
true
;
}
var
dcar1
=
new
DCar('y dcar');
var
dcar2
=
new
DCar('b dcar');
dcar1.showColor();
dcar2.showColor();
alert(DCar._initialized);
//
output "true"
alert(dcar1._initialized);
//
output "undefined"
</
script
>
posted on 2008-12-05 11:45
CopyHoo
閱讀(3497)
評(píng)論(0)
編輯
收藏
所屬分類:
JavaScript
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
獲取當(dāng)前節(jié)點(diǎn) - 通過事件來獲取。
1、在Baidu空間中的發(fā)現(xiàn)
如何讓 href 失效。
JS類 檢測(cè)上傳圖片的大小,寬,高及格式檢查 - 封裝控件的思想
js 判斷上傳文件類型
javascript 弱弱的限制上傳文件大小(一定要服務(wù)器再判斷一遍。)
需要 fos 對(duì)象對(duì)客戶端上傳文件大小進(jìn)行限制的例子
言簡意賅的一篇 js 操作 dom
這是一個(gè)一應(yīng)俱全的實(shí)例
基礎(chǔ):Javascript DOM操作: 子窗口操作父窗口table
Copyright ©2025 CopyHoo Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
嘉峪关市
|
资源县
|
桃源县
|
上高县
|
白城市
|
广宗县
|
江永县
|
平谷区
|
安西县
|
稷山县
|
宣城市
|
龙里县
|
皋兰县
|
吉安县
|
金山区
|
修水县
|
法库县
|
金湖县
|
阿拉善右旗
|
庆阳市
|
信宜市
|
东平县
|
巴里
|
遂宁市
|
德州市
|
呼和浩特市
|
嘉兴市
|
肃北
|
南宁市
|
芜湖县
|
修文县
|
义马市
|
乐安县
|
镇康县
|
垣曲县
|
蛟河市
|
顺昌县
|
日照市
|
肇庆市
|
普宁市
|
浦县
|