国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Javascript學(xué)習(xí)之創(chuàng)建對(duì)象

jollywing / 2163人閱讀

摘要:在中,除了幾種原始類(lèi)型外,其余皆為對(duì)象,,既然對(duì)象如此重要,那就列舉一下在中如何創(chuàng)建對(duì)象通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象實(shí)例對(duì)象字面量對(duì)象字面量是對(duì)象定義的一種簡(jiǎn)寫(xiě)形式,目的在于簡(jiǎn)化創(chuàng)建包含大量屬性的對(duì)象的過(guò)程。

在Javascript中,除了幾種原始類(lèi)型外,其余皆為對(duì)象(Object,Array ...),既然對(duì)象如此重要,那就列舉一下在Javascript中如何創(chuàng)建對(duì)象:

通過(guò)Object構(gòu)造函數(shù)創(chuàng)建對(duì)象實(shí)例
var person = new Object();
person.name = "krew";
person.age = 26;
對(duì)象字面量

對(duì)象字面量是對(duì)象定義的一種簡(jiǎn)寫(xiě)形式,目的在于簡(jiǎn)化創(chuàng)建包含大量屬性的對(duì)象的過(guò)程。

var person = {
  name : "krew",
  age : 26
}
工廠(chǎng)模式

工廠(chǎng)模式是一種設(shè)計(jì)模式,通過(guò)對(duì)創(chuàng)建具體對(duì)象的過(guò)程進(jìn)行抽象。使用函數(shù)來(lái)封裝創(chuàng)建對(duì)象的細(xì)節(jié),可以無(wú)數(shù)次地調(diào)用用該函數(shù),每次都可以得到包含制定內(nèi)容的對(duì)象。

function personFactory(name, age){
  var obj = new Object();
  obj.name = name;
  obj.age = age;
  obj.sayName = function(){
    console.log(this.name);
  }
  return obj;
}

var person1 = personFactory("krew", 26);  
var person2 = personFactory("john", 20);
構(gòu)造函數(shù)模式

基于工廠(chǎng)模式創(chuàng)建對(duì)象雖然方便,但是創(chuàng)建出來(lái)的對(duì)象沒(méi)有特定的對(duì)象類(lèi)型(比如原生對(duì)象Object, Array的實(shí)例都有自己的類(lèi)型),所以就采用構(gòu)造函數(shù)模式來(lái)創(chuàng)建對(duì)象,就能解決識(shí)別對(duì)象類(lèi)型的問(wèn)題。

function Person(name, age){
  this.name = name;
  this.age = age;
  this.sayName = function() {
    console.log(this.name);
  }
}

var person1 = new Person("krew", 26);
var person2 = new Person("john", 20);

person1.sayName();  // "krew"
person2.sayName();  // "john"

person1.constructor == Person  // true
person2.constructor == Person  // true
原型模式

每個(gè)函數(shù)在創(chuàng)建的時(shí)候,就會(huì)根據(jù)特定的規(guī)則為該函數(shù)創(chuàng)建一個(gè)prototype屬性,這個(gè)屬性是指向函數(shù)的原型對(duì)象的指針。這個(gè)原型對(duì)象的包含可以由特定類(lèi)型的所有實(shí)例共享的屬性和方法。所以,在構(gòu)造函數(shù)的prototype屬性上添加屬性與方法,該構(gòu)造函數(shù)的所有實(shí)例都會(huì)在原型鏈上查找到這些屬性與方法。

function Person() {
}
Person.prototype.name = "krew";
Person.prototype.age = 26;
Person.prototype.sayName = function() {
  console.log(this.name);
}

var person1 = new Person();
var person2 = new Person();

person1.sayName();  // "krew"
person2.sayName();  // "krew"
組合構(gòu)造函數(shù)和原型模式

由于原型對(duì)象中的屬性是被很多實(shí)例所共享的,對(duì)于引用類(lèi)型的屬性值,將會(huì)存在實(shí)例間無(wú)法隔離的問(wèn)題:

function Person() {
}
Person.prototype = {
  constructor : Person,
  name : "krew",
  age : 26,
  friends : ["john", "kitty"],
  showFriends : function() {
    console.log(this.friends);
  }
}
var person1 = new Person();
var person2 = new Person();

person1.friends.push("petter");

person1.showFriends()  // ["john", "kitty", "petter"]
person2.showFriends()  // ["john", "kitty", "petter"]

可以看到,僅是在實(shí)例person1的friends屬性上添加值,但person2也跟著變化。這是因?yàn)閒riends數(shù)組存在于Person.prototype而非person1中,person1與person2中的friends皆為引用Person.prototype中的friends,所以當(dāng)通過(guò)person1來(lái)改變friends的時(shí)候,person2中的friends也會(huì)反映出來(lái)。
通過(guò)組合構(gòu)造函數(shù)與原型模式可以解決上面出現(xiàn)的問(wèn)題,構(gòu)造函數(shù)模式用于定義實(shí)例屬性,而原型模式用于定義方法和共享的屬性,每個(gè)實(shí)例會(huì)有自己的一份實(shí)例屬性,同時(shí)又共享著方法的引用,極大的節(jié)省了內(nèi)存。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.sayName = function() {
  console.log(this.name);
}

var person1 = new Person("krew", 26);
var person2 = new Person("john", 20);

person1.sayName();  // "krew"
person2.sayName();  // "john"
動(dòng)態(tài)原型模式
function Person(name, age){
  this.name = name;
  this.age = age;
  if (typeof this.sayName != "function") {
    Person.prototype.sayName = function() {
      console.log(this.name);
    }
  }
}

var person1 = new Person("krew", 26);
var person2 = new Person("john", 20);

person1.sayName();  // "krew"
person2.sayName();  // "john"
寄生構(gòu)造函數(shù)模式
function Person(name, age) {
  var obj = new Object();
  obj.name = name;
  obj.age = age;
  obj.sayName = function() {
    console.log(this.name);
  }
  return obj;
}

var person1 = new Person("krew", 26);
var person2 = new Person("john", 20);

person1.sayName();  // "krew"
person2.sayName();  // "john"
穩(wěn)妥構(gòu)造函數(shù)模式
function Person(name) {
  var obj = new Object();
  obj.sayName = function() {
    console.log(name);
  }
  return obj;
}

var person1 = Person("krew");
var person2 = Person("john");

person1.sayName();  // "krew"
person2.sayName();  // "john"

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/88229.html

相關(guān)文章

  • JavaScript學(xué)習(xí)之Object(下)new命令

    摘要:命令作用作用是執(zhí)行構(gòu)造函數(shù),返回實(shí)例對(duì)象上面例子是自定義一個(gè)構(gòu)造函數(shù),其最大的特點(diǎn)就是首字母大寫(xiě),用執(zhí)行構(gòu)造函數(shù)其中,在的執(zhí)行下,代表了實(shí)例化后的對(duì)象,這個(gè)也就有屬性注意點(diǎn)如果不用執(zhí)行構(gòu)造函數(shù),那么指向的是全局有兩種方式可以避免內(nèi)部定義嚴(yán)格 new命令 new作用 作用是執(zhí)行構(gòu)造函數(shù),返回實(shí)例對(duì)象 function F() { this.name = object } var ...

    Salamander 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)之零碎記憶點(diǎn)總結(jié)記錄(一)

    摘要:總結(jié)記錄常見(jiàn)的五種類(lèi)型報(bào)錯(cuò)語(yǔ)法解析錯(cuò)誤變量未定義變量類(lèi)型錯(cuò)誤數(shù)組越界相關(guān)函數(shù)參數(shù)錯(cuò)誤能防止報(bào)錯(cuò)導(dǎo)致后面代碼不能執(zhí)行問(wèn)題的未定義不影響后面函數(shù)的執(zhí)行注意點(diǎn)在報(bào)錯(cuò)前,不執(zhí)行里的內(nèi)容不報(bào)錯(cuò)也不執(zhí)行在報(bào)錯(cuò)后,的內(nèi)容不會(huì)被執(zhí)行執(zhí)行完結(jié)束,如果有 總結(jié)記錄 try-catch-finally 常見(jiàn)的五種類(lèi)型報(bào)錯(cuò) SyntaxError語(yǔ)法解析錯(cuò)誤 ReferenceError變量未定義 Type...

    fou7 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)之對(duì)象原型及繼承

    摘要:原型要掌握這三者之間的關(guān)系,通過(guò)代碼例子記錄一下自身屬性的這里就是通過(guò)代碼看一下做了什么默認(rèn)情況下,將的所有屬性包括繼承的賦值給有什么東西呢自己的原型鏈,添加一個(gè)屬性,用來(lái)指明對(duì)象的誰(shuí)構(gòu)造的自身全部屬性,這邊構(gòu)建一個(gè)空對(duì)象原型,所以沒(méi)有自有 原型 要掌握這三者之間的關(guān)系prototype,constructor,__proto__通過(guò)代碼例子記錄一下 function F() { ...

    妤鋒シ 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)之Object(下)相關(guān)方法

    摘要:它不區(qū)分該屬性是對(duì)象自身的屬性,還是繼承的屬性。那么我們要遍歷對(duì)象所有屬性,包括繼承以及不可遍歷的屬性,用加原型遍歷實(shí)現(xiàn)類(lèi)似的用遞歸 Object靜態(tài)方法 Object自身方法,必須由Object調(diào)用,實(shí)例對(duì)象并不能調(diào)用 Object.getPrototypeOf() 作用是獲取目標(biāo)對(duì)象的原型 function F() {}; var obj = new F(); console.lo...

    amuqiao 評(píng)論0 收藏0
  • Javascript學(xué)習(xí)之繼承

    摘要:繼承是面向?qū)ο缶幊陶Z(yǔ)言中的一個(gè)重要的概念,繼承可以使得子類(lèi)具有父類(lèi)的屬性和方法或者重新定義追加屬性和方法等。但是在中沒(méi)有類(lèi)的概念,是基于原型的語(yǔ)言,所以這就意味著對(duì)象可以直接從其他對(duì)象繼承。 繼承是面向?qū)ο缶幊陶Z(yǔ)言中的一個(gè)重要的概念,繼承可以使得子類(lèi)具有父類(lèi)的屬性和方法或者重新定義、追加屬性和方法等。但是在Javascript中沒(méi)有類(lèi)的概念,是基于原型的語(yǔ)言,所以這就意味著對(duì)象可以直接...

    CHENGKANG 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<