看了那麼多介紹,終於看懂物件導向 原型鏈!!!

2021-10-01 19:54:35 字數 3032 閱讀 5963

例子 ?: 我要吃麵條

物件導向

物件導向就是對面向過程的封裝

我們以前的程式設計思想是,每乙個功能,都按照需求一步一步的逐步完成

我們以後的程式設計思想是,每乙個功能,都先創造乙個麵館,這個麵館能幫我們作出乙個面(完成這個功能的物件),然後用麵館創造出乙個,我們只要等到結果就好了

建構函式會比工廠函式簡單一下

先書寫乙個建構函式

在建構函式內向物件新增一些成員

使用這個建構函式創造乙個物件(和 new 連用)

建構函式可以建立物件,並且建立乙個帶有屬性和方法的物件

物件導向就是要想辦法找到乙個有屬性和方法的物件

物件導向就是我們自己製造建構函式的過程

// 1. 先創造乙個建構函式

function

person

(name, gender)

// 2. 使用建構函式建立物件

var p1 =

newperson

('jack'

,'man'

)var p2 =

newperson

('rose'

,'woman'

)

首字母大寫

function

person()

var o1 =

newperson()

// 能得到乙個物件

function

person()

var o2 =

newperson()

// 能得到乙個物件

當呼叫的時候如果不需要傳遞引數可以不寫(),建議都寫上

function

person()

var o1 =

newperson()

// 能得到乙個空物件

var o2 =

newperson

// 能得到乙個空物件

建構函式內部的 this,由於和 new 連用的關係,是指向當前例項物件的

function

person()

var o1 =

newperson()

// 本次呼叫的時候,this => o1

var o2 =

newperson()

// 本次呼叫的時候,this => o2

因為建構函式會自動返回乙個物件,所以建構函式內部不要寫 return

我們在寫建構函式的時候,是不是也可以新增一些方法進去呢?

function

person()

}var o1 =

newperson()

var o2 =

newperson

()

但是這樣好不好呢?缺點在**?

function

person()

}// 第一次 new 的時候, person 這個函式要執行一遍

// 執行一遍就會創造乙個新的函式,並且把函式位址賦值給 this.sayhi

var o1 =

newperson()

// 第二次 new 的時候, person 這個函式要執行一遍

// 執行一遍就會創造乙個新的函式,並且把函式位址賦值給 this.sayhi

var o2 =

newperson

()

怎麼解決這個問題呢?

function

person()

person.prototype.name =

'prototype'

person.prototype.

sayhi

=function()

我們發現了乙個叫做prototype的空間是和函式有關聯的

並且可以向裡面儲存一些東西

重點:在函式的 prototype 裡面儲存的內容,不是給函式使用的,是給函式的每乙個例項化物件使用的

那例項化物件怎麼使用能?

那麼這個__proto__又指向**呢?

function

person()

var p1 =

newperson()

console.

log(p1.__proto__ === person.prototype)

// true

function

person()

person.prototype.

sayhi

=function()

var p1 =

newperson()

p1.sayhi

()

到這裡,當我們例項化多個物件的時候,每個物件裡面都沒有方法

function

person()

person.prototype.

sayhi

=function()

var p1 =

newperson()

var p2 =

newperson()

console.

log(p1.sayhi === p2.sayhi)

結論比如: 函式

// 函式本身也是乙個物件

varfn

=function()

var fun =

newfunction

()

比如: tab選項卡

為何那麼多女人不想嫁人

為何那麼多女人不想嫁人?為何我不願意嫁給你?你叫我給你乙個理由,是的,我有理由。理由是 結了婚,我不再是情人,也不再重要,我只是乙個黃臉婆。我不願意被冷落。理由是 結了婚,我的地位遠遠落後你家的每乙個人,我再也得不到關愛的眼神。理由是 結了婚,所有親友的問候語就會變成 什麼時候生小孩啊?我不要生小孩...

為什麼那麼多「偽需求」?

為什麼有那麼多 偽需求 做產品或做工具,經常碰到 偽需求 的問題,其實業界早有定論,使用者說不清楚自己的需求是什麼?有兩個流行的著名故事,第乙個故事,在汽車出現之前,福特去調研使用者,眾多使用者表示 我們需要一輛更快的馬車 第二個故事,大學城邊酒店林立,競爭激烈,其中一家的酒店老闆開始使用者調研,每...

為什麼華為加班那麼多

為什麼華為加班那麼多?十年前,pc機 個人電腦 的記憶體還是256k,512k為主流,再往前,記憶體就更小了。為了節省空間,編寫的程式都是很精練的。是否還記得有這樣一道演算法題 不用額外的變數,交換兩個變數的值。連乙個臨時變數的空間都節省了。現在的pc機記憶體已是4g,8g為主流了,伺服器的記憶體就...