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

JavaScript 學(xué)習(xí)筆記(六)

 更新時(shí)間:2009年12月31日 23:19:18   作者:  
JavaScript 定義類或?qū)ο?javascript步入高手行列必須要了解的。
一、 工廠方式
自己的理解:要?jiǎng)?chuàng)建很多個(gè)對(duì)象的實(shí)例,這些實(shí)例有相同的屬性,但是有不同的屬性值。這個(gè)時(shí)候就需要?jiǎng)?chuàng)個(gè)工廠函數(shù)(factory function)。
工廠函數(shù)(factory function):創(chuàng)建并返回特定類型的對(duì)象。
工廠函數(shù)中如果一個(gè)屬性是方法的話,可以在工廠函數(shù)的外面定義對(duì)象的方法,然后通過(guò)屬性指向該方法,從而可以避開每次都調(diào)用自己的屬性方法,這樣做使得每個(gè)對(duì)象都共享了同一個(gè)函數(shù)。
示例:
復(fù)制代碼 代碼如下:

<script type="text/javascript">
//工廠函數(shù)外面定義對(duì)象的方法
function ShowNameFn() {
alert(this.Name);
}
//工廠方式創(chuàng)建對(duì)象
function CreatBOFn(sName, iAge, bSex) {
var BO = new Object();
BO.Name = sName;
BO.Age = iAge;
BO.Sex = bSex;
BO.ShowName = ShowNameFn; //該屬性實(shí)際上是指向函數(shù)的指針,是一個(gè)方法
return BO;
}
//按鈕測(cè)試調(diào)用
function FactoryCreateFn() {
var oPerson1 = CreatBOFn("張三", 18, true); //創(chuàng)建實(shí)例實(shí)際上是直接調(diào)用方法
oPerson1.ShowName();
}
</script>

總結(jié):工廠函數(shù)這種方式定義類或?qū)ο?,他在?chuàng)建實(shí)例的時(shí)候就調(diào)用這個(gè)工廠函數(shù)。
二、 構(gòu)造函數(shù)方式
第一步選擇類名,即構(gòu)造函數(shù)的名字,BO名首字母大寫,看下面代碼發(fā)現(xiàn)跟上面的工廠函數(shù)類似。
示例:
復(fù)制代碼 代碼如下:

//------第二種:構(gòu)造函數(shù)方式--------------------------------
function Car(color, money) {
this.Color = color;
this.Money = money;
this.ShowMoney = function() {
alert(this.Money);
}
}
//按鈕調(diào)用測(cè)試
function NewCarFn() {
var Car1 = new Car("紅色", "23萬(wàn)RMB");
Car1.ShowMoney();
}
//----------------------------------------------------------

比較上一種工廠函數(shù)方式的區(qū)別:
① 構(gòu)造函數(shù)內(nèi)部沒有創(chuàng)建對(duì)象,而是使用this關(guān)鍵字。
② 使用new運(yùn)算符調(diào)用構(gòu)造函數(shù)。
三、 原型方式
利用對(duì)象的prototype屬性,可以把他看成創(chuàng)建新對(duì)象所依賴的原型,用空構(gòu)造函數(shù)來(lái)設(shè)置類名,然后所有的屬性和方法都被直接賦予prototype屬性。
原型方式的問題:
首先,這個(gè)構(gòu)造函數(shù)沒有參數(shù),使用原型方式時(shí),不能通過(guò)給構(gòu)造函數(shù)傳遞參數(shù)初始化屬性的值。必須在對(duì)象創(chuàng)建后才能改變屬性的默認(rèn)值。
其次,當(dāng)屬性指向的是對(duì)象,而不是函數(shù)時(shí),對(duì)象卻被多個(gè)實(shí)例共享的,其中一個(gè)改變將引起其他對(duì)象的改變。
示例:
復(fù)制代碼 代碼如下:

//先定義一個(gè)空的構(gòu)造函數(shù)
function Car() {
}
//屬性和方法直接賦予prototype屬性
Car.prototype.Color = "紅色,";
Car.prototype.Money = "20萬(wàn)";
Car.prototype.Drivers = new Array("小三", "小四");
var Car1 = new Car();
Car1.Drivers.push("小五"); //實(shí)例1中給對(duì)象Drivers新增了值(實(shí)際上就是在原型里面加了多了個(gè)“小五”,所以當(dāng)new第二個(gè)對(duì)象的時(shí)候讀屬性Drivers也出現(xiàn)了小五)
alert(Car1.Drivers);
var Car2 = new Car();
alert(Car2.Drivers); //實(shí)例2中,對(duì)象中的值改變了!輸出“小三,小四,小五”

四、 混合的構(gòu)造函數(shù)/原型方式
聯(lián)合使用構(gòu)造函數(shù)和原型方式,就可以像其他語(yǔ)言一樣的創(chuàng)建對(duì)象。
構(gòu)造函數(shù)定義對(duì)象的所有非函數(shù)屬性,原型方式定義對(duì)象的函數(shù)屬性(方法)。
示例:
復(fù)制代碼 代碼如下:

function BOStudent(name,age) {
this.姓名 = name;
this.年齡 = age;
this.課程 = new Array("語(yǔ)文","數(shù)學(xué)");
}
BOStudent.prototype.ShowName = function() {
alert(this.姓名);
};
//點(diǎn)擊按鈕調(diào)試
function Admixture() {
var stu1 = new BOStudent("張三", 20); //new第一個(gè)BO
var stu2 = new BOStudent("李四", 22); //new第二個(gè)BO
stu1.課程.push("物理"); //給對(duì)象1 添加物理課程項(xiàng)
alert(stu1.課程);
alert(stu2.課程);
}

混合的構(gòu)造函數(shù)/原型方式是ECMAScript采用的主要方式,他具有其他方式的特性,卻沒有他們的副作用。
五、 動(dòng)態(tài)原型方法
大多數(shù)的面向?qū)ο笳Z(yǔ)言,定義類時(shí),屬性和方法都打包在一起。而上面的混合構(gòu)造函數(shù)/原型方式屬性和方法是分開的,有些人認(rèn)為在構(gòu)造函數(shù)內(nèi)部找屬性,在外面找方法的做法不合邏輯,因此也就產(chǎn)生了動(dòng)態(tài)原型方法。
區(qū)別在于:賦予對(duì)象的方法的位置不同。動(dòng)態(tài)原型方法是在構(gòu)造函數(shù)的內(nèi)部,而上面的第四種是在構(gòu)造函數(shù)外部。
示例:
復(fù)制代碼 代碼如下:

function BODynamicPrototype(name, age) {
this.姓名 = name;
this.年齡 = age;
this.課程 = new Array("111", "222");
//_initialized標(biāo)識(shí)判斷是否已經(jīng)初始化過(guò),即是否已給原型賦予了任何方法,該方法只創(chuàng)建并賦值一次
if (typeof BODynamicPrototype._initialized == "undefined") {
BODynamicPrototype.prototype.ShowName = function() {
alert(this.姓名);
};
BODynamicPrototype._initialized = true;
}
}

//點(diǎn)擊按鈕調(diào)試
function DynamicPrototype() {
var stu1 = new BODynamicPrototype("aaa", 20); //new第一個(gè)BO
var stu2 = new BODynamicPrototype("bbb", 22); //new第二個(gè)BO
stu1.課程.push("333"); //給對(duì)象1 添加物理課程項(xiàng)
alert(stu1.課程);
alert(stu2.課程);
}

六、 混合工廠方式
目的是創(chuàng)建假構(gòu)造函數(shù),只返回另一種對(duì)象的新實(shí)例。這種方式在對(duì)象方法內(nèi)部管理方面與經(jīng)典方式有著相同的問題。強(qiáng)烈建議:除非萬(wàn)不得已避免使用!

相關(guān)文章

  • JS實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證功能完整示例

    JS實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證功能完整示例

    這篇文章主要介紹了JS實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證功能,結(jié)合完整實(shí)例形式分析了JS滑動(dòng)拼圖驗(yàn)證相關(guān)原理、實(shí)現(xiàn)步驟與操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • 原生js實(shí)現(xiàn)移動(dòng)端Touch輪播圖的方法步驟

    原生js實(shí)現(xiàn)移動(dòng)端Touch輪播圖的方法步驟

    這篇文章主要介紹了原生js實(shí)現(xiàn)移動(dòng)端Touch輪播圖的方法步驟,touch輪播圖其實(shí)就是通過(guò)手指的滑動(dòng),來(lái)左右切換輪播圖,touch輪播圖其實(shí)就是通過(guò)手指的滑動(dòng),來(lái)左右切換輪播圖,
    2019-01-01
  • JS控制只能輸入數(shù)字并且最多允許小數(shù)點(diǎn)兩位

    JS控制只能輸入數(shù)字并且最多允許小數(shù)點(diǎn)兩位

    這篇文章主要介紹了JS控制只能輸入數(shù)字并且最多允許小數(shù)點(diǎn)兩位,本文給大家提到j(luò)s如何限制input輸入框只能輸入數(shù)字問題,需要的朋友可以參考下
    2019-11-11
  • Echart Bar雙柱狀圖樣式最全詳解

    Echart Bar雙柱狀圖樣式最全詳解

    echarts柱狀圖是用柱狀圖的形式展示數(shù)據(jù),這樣看起來(lái)比較直觀,下面這篇文章主要給大家介紹了關(guān)于Echart Bar雙柱狀圖樣式的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • chatGPT前端流式輸出js實(shí)現(xiàn)三種方法—fetch、SSE、websocket

    chatGPT前端流式輸出js實(shí)現(xiàn)三種方法—fetch、SSE、websocket

    項(xiàng)目需要接入chatgpt提供的api,后端返回流式的字符,前端接收并實(shí)時(shí)顯示,在JavaScript中,使用Stream流通常指的是處理數(shù)據(jù)流的一種方式,它們?cè)试S數(shù)據(jù)被處理成塊,而不是一次性處理整個(gè)數(shù)據(jù)集,這對(duì)于處理大量數(shù)據(jù)或者來(lái)自網(wǎng)絡(luò)請(qǐng)求的數(shù)據(jù)非常有用,
    2024-07-07
  • uniapp小程序配置tabbar底部導(dǎo)航欄實(shí)戰(zhàn)指南

    uniapp小程序配置tabbar底部導(dǎo)航欄實(shí)戰(zhàn)指南

    tabBar如果應(yīng)用是一個(gè)多tab應(yīng)用,可以通過(guò)tabBar配置項(xiàng)指定tab欄的表現(xiàn),以及tab切換時(shí)顯示的對(duì)應(yīng)頁(yè),下面這篇文章主要給大家介紹了關(guān)于uniapp小程序配置tabbar底部導(dǎo)航欄的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 將查詢條件的input、select清空

    將查詢條件的input、select清空

    查詢條件清空將input、select的值清空,下面有個(gè)不錯(cuò)的示例,需要的朋友可以了解下
    2014-01-01
  • layer彈出框確定前驗(yàn)證:彈出消息框的方法(彈出兩個(gè)layer)

    layer彈出框確定前驗(yàn)證:彈出消息框的方法(彈出兩個(gè)layer)

    今天小編就為大家分享一篇layer彈出框確定前驗(yàn)證:彈出消息框的方法(彈出兩個(gè)layer),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • js實(shí)現(xiàn)input的賦值小結(jié)

    js實(shí)現(xiàn)input的賦值小結(jié)

    這篇文章主要介紹了js實(shí)現(xiàn)input的賦值問題小結(jié),在實(shí)際的開發(fā)中,為了頁(yè)面的美觀,可能用到一些框架,比如EasyUI框架,文中介紹了easyui的input框賦值代碼,感興趣的朋友一起看看吧
    2023-12-12
  • JS綁定事件的3種方法舉例示范(簡(jiǎn)單易懂)

    JS綁定事件的3種方法舉例示范(簡(jiǎn)單易懂)

    在JavaScript的學(xué)習(xí)中我們經(jīng)常會(huì)遇到JavaScript的事件機(jī)制,例如事件綁定、事件監(jiān)聽、事件委托(事件代理)等,這篇文章主要給大家介紹了關(guān)于JS綁定事件的3種方法,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

山东| 康保县| 封开县| 桐柏县| 江山市| 吉安县| 弋阳县| 连江县| 山阴县| 抚顺县| 迁西县| 南漳县| 象山县| 宁乡县| 马龙县| 永嘉县| 资源县| 广河县| 华容县| 长宁县| 千阳县| 通山县| 龙南县| 乌拉特后旗| 乐东| 久治县| 崇仁县| 青田县| 龙川县| 响水县| 称多县| 新野县| 嘉峪关市| 红安县| 南康市| 揭西县| 象山县| 贺州市| 阳城县| 恩平市| 红桥区|