亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript創建對象方式總結【工廠模式、構造函數模式、原型模式等】

2019-11-19 12:19:39
字體:
來源:轉載
供稿:網友

本文實例總結了JavaScript創建對象方式。分享給大家供大家參考,具體如下:

這里主要是對《JavaScript高級程序設計》第六章(面向對象的程序設計)的總結,書上的這章至少看了4遍是有的。該章主要講對象的創建與繼承。其中創建對象和繼承方式至少6種,再加上一些方法屬性,很容易搞得暈頭轉向的。因此有必要對本章的內容理一理,以后忘了也好過來看一看。

由于文章長度的限制,本文主要講創建對象。

1 創建對象

1.1 一般方法

使用Object或者采用對象字面量的方法。

var o = {a: 1};var o2=new Object();o2.a=1;

缺點:使用同一個接口創建很多對象,會產生大量重復的代碼。

1.2工廠模式

function parent(name,age){  var Child = new Object();  Child.name=name;  Child.age=age;  Child.sayHi=function(){    console.log("Hi");  }  return Child;};var x = Parent("Tom",12);console.log(x.name); //Tomx.sayHi(); //Hi

函數parent能夠根據接受的參數來構建一個包含所有必要信息的child對象??梢詿o限次調用這個函數,都會返回一個包含兩個屬性和一個方法的對象。

解決了創建多個相似對象的問題,但卻沒有解決對象識別的問題(即怎樣知道一個對象的類型)。

1.3構造函數模式

對于構造函數這個名字,學過java或者c++的同學應該都是知道的,在js里也是差不多的。

用構造函數將上面的例子重寫如下:

function Parent(name,age){  this.name=name;  this.age=age;  this.sayHi=function(){    console.log("Hi");  };}var x = new Parent("Tom",12);console.log(x.name); //Tomx.sayHi(); //Hi

對于構造函數,我們需要在調用的時候加關鍵字 new。要注意的是,構造函數始終是以一個大寫字母開頭,而非構造函數始終是以一個小寫字母開頭。

與工廠模式相比,主要有以下幾個不同之處:

  • 沒有顯示地創建對象;
  • 直接將屬性和方法賦給了this對象;
  • 沒有return語句。

缺點:使用構造函數的缺點就是每個方法都需要在每個實例上重新創建一遍。

1.4原型模式

我們創建的每一個函數都有一個prototype(原型)屬性,這個屬性是一個指針,指向一個對象,而這個對象的用途是包含可以由特定類型的所有實例共享的屬性與方法。使用原型對象的好處是可以讓所有的對象實例共享其包含的屬性與方法。

function Parent(name,age){  Parent.prototype.name=name;  Parent.prototype.age=age;  Parent.prototype.sayHi=function(){    console.log("Hi");  };}var x = new Parent("Tom",12);console.log(x.name); //Tomx.sayHi(); //Hi

缺點:優點就是其缺點,方法屬性都可以共享。具體可以看下面這個例子

function Parent(name,age){  Parent.prototype.name=name;  Parent.prototype.age=age;  Parent.prototype.arr=["123","we"];  Parent.prototype.sayHi=function(){    console.log("Hi");  };}var x = new Parent("Tom",12);var y = new Parent("Tom1",12);x.arr.push("x");y.arr.push("y");console.log(x.arr);//["123", "we", "x", "y"]console.log(y.arr);//["123", "we", "x", "y"]

對象x修改自己的屬性,竟然會影響到y對象;同理,對y也一樣。這個明顯就很不合理啊,太可怕了!

1.5組合使用構造函數模式和原型模式

function Parent(name,age){  //只把屬性留在這里定義,方法放在原型對象中  this.name=name;  this.age=age;}//第一種方式Parent.prototype.sayHi=function(){  console.log("Hi");};//第二種方式//由于采用對象字面量,因此必須修正其constructor屬性;Parent.prototype={  constructor:Parent,  sayHi:function(){    console.log("Hi");  }}var x = new Parent("Tom",12);console.log(x.name); //Tomx.sayHi(); //Hi

在這個例子中,實例屬性都是在構造函數中定義的,而由所有實例共享的屬性constructor和方法則是在原型中定義的。

是目前使用最廣泛、認同度最高的一種創建自定義類型的方法。

--------------------------感覺后面幾種方法有些變態了--------------------------------

1.6 動態原型模式

function Parent(name,age){  this.name=name;  this.age=age;  if( typeof this.sayHi !="function"){    Parent.prototype.sayHi=function(){      console.log("Hi");    };  }}var x = new Parent("Tom",12);console.log(x.name); //Tomx.sayHi(); //Hi

先檢查某個應該存在方法是否有效再來決定是否需要初始化原型。

1.7寄生構造函數模式

當前面幾種都不適用的情況下,可以使用寄生構造函數模式。這種函數的基本思想是創建一個函數,該函數的作用僅僅是封裝創建對象的代碼,然后再返回新創建的對象。

function parent(name,age){  var Child = new Object();  Child.name=name;  Child.age=age;  Child.sayHi=function(){    console.log("Hi");  }  return Child;};var x = Parent("Tom",12);console.log(x.name); //Tomx.sayHi(); //Hi

但是其實就是和工廠模式一模一樣,你TM在逗我嗎?????

1.8穩妥構造函數模式

穩妥構造函數遵循與寄生構造函數模式類似的模式,但有兩點不同:一是新創建對象的實例方法不引用this; 二是不使用new操作調用構造函數。

function Parent(name,age){  var o=new Object();   //私有變量或者方法  var name=name,    age=age;  o.sayName=function(){     //name前面沒有this    console.log(name+" "+age)  }  return o;}var x = Parent("Tom",12);x.sayName(); //Tom 12

變量x中保存的是一個穩妥對象,而除了調用sayName()方法外,沒有別的方式可以訪問其數據成員。

更多關于JavaScript相關內容還可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品午夜精品| 粉嫩老牛aⅴ一区二区三区| 国内精品久久久久久久久| 91亚洲精品久久久| 亚洲午夜精品久久久久久性色| 欧美成年人视频| 在线视频一区二区| 日本在线精品视频| 91深夜福利视频| 亚洲区bt下载| 青青在线视频一区二区三区| 国产日韩欧美在线| 色与欲影视天天看综合网| 国产精品日本精品| 奇米一区二区三区四区久久| 中文字幕亚洲一区二区三区| 国产日韩专区在线| 久久久久日韩精品久久久男男| 久久久天堂国产精品女人| 欧洲中文字幕国产精品| 亚洲裸体xxxx| 在线色欧美三级视频| 国产91成人video| 国产精品高潮呻吟久久av野狼| 精品久久久精品| 午夜精品久久久99热福利| 国产一区二区三区四区福利| 久久久久久久久91| 色中色综合影院手机版在线观看| 日韩精品在线观| 91欧美激情另类亚洲| 51精品国产黑色丝袜高跟鞋| 国产午夜精品美女视频明星a级| 正在播放欧美一区| 亚洲人永久免费| 亚洲一区二区日本| 国产成人精品午夜| 亚洲网站在线观看| 国产综合在线视频| 亚洲欧美www| 国产精品成人免费电影| 精品国产一区二区三区在线观看| 久久久久久久久电影| 久久久久久久久亚洲| 久久在线精品视频| 91精品在线观看视频| 亚洲国产欧美精品| 国产精品1234| 国产日韩欧美91| 成人福利视频在线观看| 色综合久久悠悠| 欧美激情按摩在线| 亚洲天堂网站在线观看视频| 久久精品视频亚洲| 亚洲图片欧洲图片av| 日韩av在线直播| 日韩福利视频在线观看| 中文字幕成人精品久久不卡| 中文字幕少妇一区二区三区| 国产精品专区h在线观看| 亚洲一级一级97网| 日韩在线资源网| 欧美日韩国产精品一区二区不卡中文| 亚洲国产古装精品网站| 久久精品国产精品亚洲| 欧美一区亚洲一区| 45www国产精品网站| 精品国产一区二区三区久久久狼| 日韩视频免费观看| 久久视频精品在线| 日韩精品中文字幕在线播放| 国产国产精品人在线视| 97国产在线视频| 国产日韩欧美电影在线观看| 欧美高清视频在线播放| 亚洲国产精品yw在线观看| 欧美成人中文字幕在线| 亚洲欧美日韩在线一区| 国产xxx69麻豆国语对白| 欧美大尺度激情区在线播放| 午夜精品久久久久久久99热浪潮| 午夜精品国产精品大乳美女| 91精品视频免费观看| 亚洲国语精品自产拍在线观看| 亚洲品质视频自拍网| 尤物九九久久国产精品的特点| 国产精品久久久久久久久久久久| 中文字幕亚洲色图| 91大神在线播放精品| 国产偷国产偷亚洲清高网站| 热99精品里视频精品| 91性高湖久久久久久久久_久久99| 久久久最新网址| 精品香蕉在线观看视频一| 永久免费看mv网站入口亚洲| 成人激情视频网| 性欧美暴力猛交69hd| 久久免费视频在线观看| 懂色av一区二区三区| 精品国产欧美成人夜夜嗨| 久久九九亚洲综合| 中文字幕视频在线免费欧美日韩综合在线看| 欧美大片在线免费观看| 日本精品免费一区二区三区| 国产精品私拍pans大尺度在线| 夜夜嗨av一区二区三区四区| 这里只有精品视频| 国产热re99久久6国产精品| 不卡伊人av在线播放| 51视频国产精品一区二区| 国产视频久久网| 久久精品亚洲94久久精品| 亚洲欧美国产精品久久久久久久| 亚洲一级免费视频| www欧美xxxx| 91亚洲国产精品| 久久在线免费观看视频| 欧美激情一二区| 久久97久久97精品免视看| 一区二区三区黄色| 欧美激情乱人伦一区| 91久久久国产精品| 久久亚洲精品小早川怜子66| 这里精品视频免费| 欧美亚洲国产另类| 亚洲精品久久久久| 51精品国产黑色丝袜高跟鞋| xvideos成人免费中文版| 久久久成人的性感天堂| 国产精品久久97| 久久综合久中文字幕青草| 亚洲精品成人av| 91九色蝌蚪国产| 久久手机精品视频| 亚洲第一网站免费视频| 欧美日韩电影在线观看| 国产精品久久久久久久av大片| 欧美日韩国产中文字幕| 7777免费精品视频| 成人av电影天堂| 欧美高清理论片| 国产精品自产拍在线观| 色婷婷综合久久久久中文字幕1| 成人激情视频在线| 亚洲成色777777女色窝| 一本一道久久a久久精品逆3p| 91美女片黄在线观| 欧美自拍视频在线| 精品久久香蕉国产线看观看亚洲| 91精品国产自产在线| 国产91露脸中文字幕在线| 不卡毛片在线看| 日韩在线免费观看视频| 日韩中文在线中文网在线观看| 亚洲a级在线播放观看| 欧美视频免费在线| 国产中文欧美精品| 国产精品视频在线播放| 日韩亚洲欧美中文在线| 欧美交受高潮1| 欧美放荡办公室videos4k| 亚洲国产精品成人va在线观看| 亚洲国产91色在线| 亚洲伊人一本大道中文字幕|