<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • javascript工廠方式的使用

    時(shí)間:2024-10-01 19:39:23 JavaScript 我要投稿
    • 相關(guān)推薦

    javascript工廠方式的使用

      一、 工廠方式

    javascript工廠方式的使用

      自己的理解:要?jiǎng)?chuàng)建很多個(gè)對(duì)象的實(shí)例,這些實(shí)例有相同的屬性,但是有不同的屬性值。這個(gè)時(shí)候就需要?jiǎng)?chuàng)個(gè)工廠函數(shù)(factory function)。

      工廠函數(shù)(factory function):創(chuàng)建并返回特定類(lèi)型的對(duì)象。

      工廠函數(shù)中如果一個(gè)屬性是方法的話(huà),可以在工廠函數(shù)的外面定義對(duì)象的方法,然后通過(guò)屬性指向該方法,從而可以避開(kāi)每次都調(diào)用自己的屬性方法,這樣做使得每個(gè)對(duì)象都共享了同一個(gè)函數(shù)。

      示例:

      復(fù)制代碼 代碼如下:

      //工廠函數(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();

      }

      總結(jié):工廠函數(shù)這種方式定義類(lèi)或?qū)ο螅趧?chuàng)建實(shí)例的時(shí)候就調(diào)用這個(gè)工廠函數(shù)。

      二、 構(gòu)造函數(shù)方式

      第一步選擇類(lèi)名,即構(gòu)造函數(shù)的名字,BO名首字母大寫(xiě),看下面代碼發(fā)現(xiàn)跟上面的工廠函數(shù)類(lèi)似。

      示例:

      復(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)部沒(méi)有創(chuàng)建對(duì)象,而是使用this關(guān)鍵字。

      ② 使用new運(yùn)算符調(diào)用構(gòu)造函數(shù)。

      三、 原型方式

      利用對(duì)象的prototype屬性,可以把他看成創(chuàng)建新對(duì)象所依賴(lài)的原型,用空構(gòu)造函數(shù)來(lái)設(shè)置類(lèi)名,然后所有的屬性和方法都被直接賦予prototype屬性。

      原型方式的問(wèn)題:

      首先,這個(gè)構(gòu)造函數(shù)沒(méi)有參數(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采用的主要方式,他具有其他方式的特性,卻沒(méi)有他們的副作用。

      五、 動(dòng)態(tài)原型方法

      大多數(shù)的面向?qū)ο笳Z(yǔ)言,定義類(lèi)時(shí),屬性和方法都打包在一起。而上面的混合構(gòu)造函數(shù)/原型方式屬性和方法是分開(kāi)的,有些人認(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)典方式有著相同的問(wèn)題。強(qiáng)烈建議:除非萬(wàn)不得已避免使用!

    【javascript工廠方式的使用】相關(guān)文章:

    使用ajax操作JavaScript對(duì)象的方法09-28

    詳解JavaScript中的splice()使用方法08-20

    javascript中for/in循環(huán)以及常見(jiàn)的使用技巧06-24

    Javascript中arguments對(duì)象的詳解和使用方法08-20

    如何使用正確的發(fā)聲方式唱歌05-26

    關(guān)于javascript對(duì)象之內(nèi)置和對(duì)象Math的使用方法10-08

    對(duì)javascript的理解08-08

    常用的JavaScript模式09-22

    Javascript的this用法簡(jiǎn)述08-15

    JavaScript學(xué)習(xí)筆記08-24

    主站蜘蛛池模板: 在线观看自拍少妇精品| 国产cosplay精品视频| 国产精品99久久精品| 欧美日韩国产成人高清视频,欧美日韩在线精品一 | 99久久成人国产精品免费| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 久久精品视频网| 婷婷五月深深久久精品| 国产精品亚洲高清一区二区| 国产精品成人在线| 国精品无码一区二区三区在线| 国产精品久久波多野结衣| 亚洲国产精品无码久久SM| 精品欧美一区二区在线观看| 911亚洲精品国内自产| 久久se精品一区精品二区| 99精品热这里只有精品| 亚洲精品无码成人片久久| 久久国产精品二国产精品| 国产精品无码无卡无需播放器| 亚洲av无码乱码国产精品fc2| 91国在线啪精品一区| 精品国产一区二区三区不卡| 亚洲人成精品久久久久| 亚洲а∨天堂久久精品9966| 亚欧乱色国产精品免费视频| 久久夜色撩人精品国产小说| 免费人欧美日韩在线精品 | 老司机午夜精品视频资源| 人妻精品久久久久中文字幕| 精品午夜福利1000在线观看| 精品亚洲欧美无人区乱码| 久久久精品日本一区二区三区 | 免费精品久久久久久中文字幕| 亚洲AV无码成人网站久久精品大| 99在线精品视频| 国语自产少妇精品视频| 国产美女精品一区二区三区| 熟妇无码乱子成人精品| 久久丫精品国产亚洲av| 久久国产热精品波多野结衣AV|