欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

JavaScript有哪些創(chuàng)建對(duì)象的方式-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“JavaScript有哪些創(chuàng)建對(duì)象的方式”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“JavaScript有哪些創(chuàng)建對(duì)象的方式”這篇文章吧。

成都創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、潁州網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)電子商務(wù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為潁州等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

1 創(chuàng)建對(duì)象

1.1 一般方法

使用Object或者采用對(duì)象字面量的方法。

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

缺點(diǎn):使用同一個(gè)接口創(chuàng)建很多對(duì)象,會(huì)產(chǎn)生大量重復(fù)的代碼。

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); //Tom
x.sayHi(); //Hi

函數(shù)parent能夠根據(jù)接受的參數(shù)來(lái)構(gòu)建一個(gè)包含所有必要信息的child對(duì)象。可以無(wú)限次調(diào)用這個(gè)函數(shù),都會(huì)返回一個(gè)包含兩個(gè)屬性和一個(gè)方法的對(duì)象。

解決了創(chuàng)建多個(gè)相似對(duì)象的問題,但卻沒有解決對(duì)象識(shí)別的問題(即怎樣知道一個(gè)對(duì)象的類型)。

1.3構(gòu)造函數(shù)模式

對(duì)于構(gòu)造函數(shù)這個(gè)名字,學(xué)過java或者c++的同學(xué)應(yīng)該都是知道的,在js里也是差不多的。

用構(gòu)造函數(shù)將上面的例子重寫如下:

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); //Tom
x.sayHi(); //Hi

對(duì)于構(gòu)造函數(shù),我們需要在調(diào)用的時(shí)候加關(guān)鍵字 new。要注意的是,構(gòu)造函數(shù)始終是以一個(gè)大寫字母開頭,而非構(gòu)造函數(shù)始終是以一個(gè)小寫字母開頭。

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

  • 沒有顯示地創(chuàng)建對(duì)象;

  • 直接將屬性和方法賦給了this對(duì)象;

  • 沒有return語(yǔ)句。

缺點(diǎn):使用構(gòu)造函數(shù)的缺點(diǎn)就是每個(gè)方法都需要在每個(gè)實(shí)例上重新創(chuàng)建一遍。

1.4原型模式

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

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); //Tom
x.sayHi(); //Hi

缺點(diǎn):優(yōu)點(diǎn)就是其缺點(diǎn),方法屬性都可以共享。具體可以看下面這個(gè)例子

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"]

對(duì)象x修改自己的屬性,竟然會(huì)影響到y(tǒng)對(duì)象;同理,對(duì)y也一樣。這個(gè)明顯就很不合理啊,太可怕了!

1.5組合使用構(gòu)造函數(shù)模式和原型模式

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

在這個(gè)例子中,實(shí)例屬性都是在構(gòu)造函數(shù)中定義的,而由所有實(shí)例共享的屬性constructor和方法則是在原型中定義的。

是目前使用最廣泛、認(rèn)同度最高的一種創(chuàng)建自定義類型的方法。

--------------------------感覺后面幾種方法有些變態(tài)了--------------------------------

1.6 動(dòng)態(tài)原型模式

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); //Tom
x.sayHi(); //Hi

先檢查某個(gè)應(yīng)該存在方法是否有效再來(lái)決定是否需要初始化原型。

1.7寄生構(gòu)造函數(shù)模式

當(dāng)前面幾種都不適用的情況下,可以使用寄生構(gòu)造函數(shù)模式。這種函數(shù)的基本思想是創(chuàng)建一個(gè)函數(shù),該函數(shù)的作用僅僅是封裝創(chuàng)建對(duì)象的代碼,然后再返回新創(chuàng)建的對(duì)象。

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); //Tom
x.sayHi(); //Hi

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

1.8穩(wěn)妥構(gòu)造函數(shù)模式

穩(wěn)妥構(gòu)造函數(shù)遵循與寄生構(gòu)造函數(shù)模式類似的模式,但有兩點(diǎn)不同:一是新創(chuàng)建對(duì)象的實(shí)例方法不引用this; 二是不使用new操作調(diào)用構(gòu)造函數(shù)。

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中保存的是一個(gè)穩(wěn)妥對(duì)象,而除了調(diào)用sayName()方法外,沒有別的方式可以訪問其數(shù)據(jù)成員。

以上是“JavaScript有哪些創(chuàng)建對(duì)象的方式”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章標(biāo)題:JavaScript有哪些創(chuàng)建對(duì)象的方式-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://www.chinadenli.net/article28/cccjjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司定制網(wǎng)站網(wǎng)站營(yíng)銷品牌網(wǎng)站制作網(wǎng)站制作響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開發(fā)