亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript高級(jí)程序設(shè)計(jì)創(chuàng)建對(duì)象方法總結(jié)

dreambei / 2161人閱讀

摘要:缺點(diǎn)無(wú)法通過(guò)識(shí)別對(duì)象,以為都是來(lái)自,無(wú)法得知來(lái)自每次通過(guò)創(chuàng)建對(duì)象的時(shí)候,所有的方法都是一樣的,但是卻存儲(chǔ)了多次,浪費(fèi)資源。所有的方法都是共享的,沒(méi)有辦法創(chuàng)建實(shí)例自己的屬性和方法,也沒(méi)有辦法像構(gòu)造函數(shù)那樣傳遞參數(shù)。

工廠模式
function Person() {
  var o = new Object();
  o.name = "hanmeimei";
  o.say = function() {
    alert(this.name);
  }
  return o;
}
var person1 = Person();

優(yōu)點(diǎn):

簡(jiǎn)單易懂。

缺點(diǎn):

無(wú)法通過(guò)constructor識(shí)別對(duì)象,以為都是來(lái)自O(shè)bject,無(wú)法得知來(lái)自Person

每次通過(guò)Person創(chuàng)建對(duì)象的時(shí)候,所有的say方法都是一樣的,但是卻存儲(chǔ)了多次,浪費(fèi)資源。

構(gòu)造函數(shù)模式
function Person() {
  this.name = "hanmeimei";
  this.say = function() {
    alert(this.name)
  }
}
var person1 = new Person();

優(yōu)點(diǎn):

通過(guò)constructor或者instanceof可以識(shí)別對(duì)象實(shí)例的類(lèi)別

可以通過(guò)new 關(guān)鍵字來(lái)創(chuàng)建對(duì)象實(shí)例,更像OO語(yǔ)言中創(chuàng)建對(duì)象實(shí)例

缺點(diǎn):

多個(gè)實(shí)例的say方法都是實(shí)現(xiàn)一樣的效果,但是卻存儲(chǔ)了很多次(兩個(gè)對(duì)象實(shí)例的say方法是不同的,因?yàn)榇娣诺牡刂凡煌?/p>

注意:

構(gòu)造函數(shù)模式隱試的在最后返回return this 所以在缺少new的情況下,會(huì)將屬性和方法添加給全局對(duì)象,瀏覽器端就會(huì)添給window對(duì)象。

也可以根據(jù)return this 的特性調(diào)用call或者apply指定this。這一點(diǎn)在后面的繼承有很大幫助。

原型模式
function Person() {}
Person.prototype.name = "hanmeimei";
Person.prototype.say = function() {
  alert(this.name);
}
Person.prototype.friends = ["lilei"];
var person1 = new Person();

優(yōu)點(diǎn):

say方法是共享的了,所有的實(shí)例的say方法都指向同一個(gè)。

可以動(dòng)態(tài)的添加原型對(duì)象的方法和屬性,并直接反映在對(duì)象實(shí)例上。

var person1 = new Person()
Person.prototype.showFriends = function() {
  console.log(this.friends)
}
person1.showFriends()  //["lilei"]

缺點(diǎn):

1.出現(xiàn)引用的情況下會(huì)出現(xiàn)問(wèn)題具體見(jiàn)下面代碼:

var person1 = new Person();
var person2 = new Person();
person1.friends.push("xiaoming");
console.log(person2.friends)  //["lilei", "xiaoming"]

因?yàn)閖s對(duì)引用類(lèi)型的賦值都是將地址存儲(chǔ)在變量中,所以person1和person2的friends屬性指向的是同一塊存儲(chǔ)區(qū)域。

2.第一次調(diào)用say方法或者name屬性的時(shí)候會(huì)搜索兩次,第一次是在實(shí)例上尋找say方法,沒(méi)有找到就去原型對(duì)象(Person.prototype)上找say方法,找到后就會(huì)在實(shí)力上添加這些方法or屬性。
3.所有的方法都是共享的,沒(méi)有辦法創(chuàng)建實(shí)例自己的屬性和方法,也沒(méi)有辦法像構(gòu)造函數(shù)那樣傳遞參數(shù)。

注意:

優(yōu)點(diǎn)②中存在一個(gè)問(wèn)題就是直接通過(guò)對(duì)象字面量給Person.prototype進(jìn)行賦值的時(shí)候會(huì)導(dǎo)致constructor改變,所以需要手動(dòng)設(shè)置,其次就是通過(guò)對(duì)象字面量給Person.prototype進(jìn)行賦值,會(huì)無(wú)法作用在之前創(chuàng)建的對(duì)象實(shí)例上

    var person1 = new Person()
    Person.prototype = {
        name: "hanmeimei2",
          setName: function(name){
          this.name = name
          }
    }
    person1.setName()   //Uncaught TypeError: person1.set is not a function(…)

這是因?yàn)閷?duì)象實(shí)例和對(duì)象原型直接是通過(guò)一個(gè)指針鏈接的,這個(gè)指針是一個(gè)內(nèi)部屬性[[Prototype]],可以通過(guò)__proto__訪問(wèn)。我們通過(guò)對(duì)象字面量修改了Person.prototype指向的地址,然而對(duì)象實(shí)例的__proto__,并沒(méi)有跟著一起更新,所以這就導(dǎo)致,實(shí)例還訪問(wèn)著原來(lái)的Person.prototype,所以建議不要通過(guò)這種方式去改變Person.prototype屬性

動(dòng)態(tài)原型模式
function Person(name) {
  this.name = name
  if(typeof this.say != "function") {
    Person.prototype.say = function(
    alert(this.name)
  }
}
var friend = new Person("jjc")
friend.say()
構(gòu)造函數(shù)和原型組合模式
function Person(name) {
  this.name = name
  this.friends = ["lilei"]
}
Person.prototype.say = function() {
  console.log(this.name)
}
var person1 = new Person("hanmeimei")
person1.say() //hanmeimei

優(yōu)點(diǎn):

解決了原型模式對(duì)于引用對(duì)象的缺點(diǎn)

解決了原型模式?jīng)]有辦法傳遞參數(shù)的缺點(diǎn)

解決了構(gòu)造函數(shù)模式不能共享方法的缺點(diǎn)

缺點(diǎn):

沒(méi)寫(xiě)到一起,封裝性不強(qiáng)

寄生構(gòu)造函數(shù)模式
function Person(name) {
  var o = new Object()
  o.name = name
  o.say = function() {
    alert(this.name)
  }
  return o
}
var peron1 = new Person("hanmeimei")
穩(wěn)妥構(gòu)造模式
function Person(name) {
  var o = new Object()
  o.say = function() {
    alert(name)
  }
}
var person1 = new Person("hanmeimei");
person1.name  // undefined
person1.say() //hanmeimei

優(yōu)點(diǎn):

安全,那么好像成為了私有變量,只能通過(guò)say方法去訪問(wèn)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/106607.html

相關(guān)文章

  • JavaScript高級(jí)程序設(shè)計(jì)——原型和原型鏈

    摘要:但是確是一個(gè)特例它的指向的是至于為什么簡(jiǎn)單解釋下所有的構(gòu)造器都來(lái)自于,甚至包括根構(gòu)造器及自身。所有構(gòu)造器都繼承了的屬性及方法。如知道了所有構(gòu)造器含內(nèi)置及自定義的都是,的是誰(shuí)呢這說(shuō)明所有的構(gòu)造器也都是一個(gè)普通對(duì)象,可以給構(gòu)造器添加刪除屬性等。 showImg(https://segmentfault.com/img/remote/1460000009446154); 前言 此文章為加深對(duì)...

    My_Oh_My 評(píng)論0 收藏0
  • javascript高級(jí)程序設(shè)計(jì)》筆記:內(nèi)存與執(zhí)行環(huán)境

    摘要:因此,所有在方法中定義的變量都是放在棧內(nèi)存中的當(dāng)我們?cè)诔绦蛑袆?chuàng)建一個(gè)對(duì)象時(shí),這個(gè)對(duì)象將被保存到運(yùn)行時(shí)數(shù)據(jù)區(qū)中,以便反復(fù)利用因?yàn)閷?duì)象的創(chuàng)建成本通常較大,這個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū)就是堆內(nèi)存。 上一篇:《javascript高級(jí)程序設(shè)計(jì)》筆記:繼承近幾篇博客都會(huì)圍繞著圖中的知識(shí)點(diǎn)展開(kāi) showImg(https://segmentfault.com/img/bVY0C4?w=1330&h=618);...

    fuyi501 評(píng)論0 收藏0
  • JavaScript高級(jí)程序設(shè)計(jì)學(xué)習(xí)筆記三(基本語(yǔ)法)

    摘要:數(shù)據(jù)類(lèi)型中有種簡(jiǎn)單數(shù)據(jù)類(lèi)型也稱為基本數(shù)據(jù)類(lèi)型和。在中非空字符串,非零數(shù)字,任意對(duì)象,都被認(rèn)為。而空字符串,和,,認(rèn)為是。用于表示整數(shù)和浮點(diǎn)數(shù)。標(biāo)識(shí)符由數(shù)字字母下劃線美元符組成,但首字母不能是數(shù)字。變量方法對(duì)象命名推薦駝峰法。 JavaScript語(yǔ)法 一.語(yǔ)法簡(jiǎn)介 因?yàn)镴avaScript語(yǔ)法和Java等語(yǔ)法非常類(lèi)似。所以只是簡(jiǎn)單介紹一下。 大小寫(xiě) JavaScript是大小寫(xiě)敏感的語(yǔ)...

    Mike617 評(píng)論0 收藏0
  • 如何閱讀《JavaScript高級(jí)程序設(shè)計(jì)》(一)

    摘要:題外話最近在看高級(jí)程序設(shè)計(jì)這本書(shū),面對(duì)著多頁(yè)的厚書(shū)籍,心里有點(diǎn)壓力,所以我決定梳理一下。。全局環(huán)境的關(guān)閉是頁(yè)面關(guān)閉或者瀏覽器關(guān)閉,而局部環(huán)境的關(guān)閉是指函數(shù)結(jié)束。數(shù)值范圍最大和最小的范圍是超出范圍的數(shù)字如何表示是一個(gè)特殊的值。 題外話 最近在看《JavaScript高級(jí)程序設(shè)計(jì)》這本書(shū),面對(duì)著700多頁(yè)的厚書(shū)籍,心里有點(diǎn)壓力,所以我決定梳理一下。。探究一下到底怎么讀這本書(shū)。本書(shū)的內(nèi)容好像...

    chadLi 評(píng)論0 收藏0
  • 如何閱讀《JavaScript高級(jí)程序設(shè)計(jì)》(一)

    摘要:題外話最近在看高級(jí)程序設(shè)計(jì)這本書(shū),面對(duì)著多頁(yè)的厚書(shū)籍,心里有點(diǎn)壓力,所以我決定梳理一下。。全局環(huán)境的關(guān)閉是頁(yè)面關(guān)閉或者瀏覽器關(guān)閉,而局部環(huán)境的關(guān)閉是指函數(shù)結(jié)束。數(shù)值范圍最大和最小的范圍是超出范圍的數(shù)字如何表示是一個(gè)特殊的值。 題外話 最近在看《JavaScript高級(jí)程序設(shè)計(jì)》這本書(shū),面對(duì)著700多頁(yè)的厚書(shū)籍,心里有點(diǎn)壓力,所以我決定梳理一下。。探究一下到底怎么讀這本書(shū)。本書(shū)的內(nèi)容好像...

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

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

0條評(píng)論

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