物件導向和原型

2021-09-27 02:02:48 字數 4495 閱讀 3419

是一種程式設計思維

所有的程式中的參與的物件提取出來,給物件 設定不同的屬性和方法

el:

老師 小明 買豆漿

面向過程:

1,老師喊小明過來

2,小明過來

3,告訴小明去買豆漿

4,給他錢,告訴他記住找零錢

5,小明下樓到早餐店

6,小明排隊

7,小明和營業員溝通買豆漿 給錢

8,營業員 收錢,找零, 準備豆漿

9,小明等待

10,營業員給豆漿

11,小明拿豆漿回來

12,給老師零錢

物件導向:

三個主體 老師 小明 和 營業員

老師:***x

***x

}小明:

營業員:

將程式 所有步驟:拆成一步一步

怎麼將大象賽進冰箱

1,開啟冰箱門

2,放進大象

3,關門

1,自變數

var obj = 

}使用屬性和方法

obj.屬性名

obj.方法名

賦值obj.屬性名 = 值

obj.方法 = function(){}

2,系統建構函式 (建立物件) object

var obj = new object();

obj.屬性=值

....

3,工廠函式建立物件

("小明",12

,"男");

console.

log(p1)

;var p2 =

createobj

("小h",20

,"女");

console.

log(p2);/*

工廠函式:

有原材料

有流水線

出來成本

*/script

>

body

>

html

>

4,建構函式 建立物件

問題:​ 函式怎麼呼叫:函式名()

​ 另一種方法: new 函式名()

當new 乙個函式會發生什麼?

1,在函式中自動 隱式建立乙個空的物件

2,改變函式中的this指向 this指向此時 指向 這個空的物件

3,隱式返回this 空物件

/* new 乙個函式發生了什麼

*/function

person

(name,age,gender)

; 自動幹的

this

.name = name;

this

.age = age;

this

.gender = gender;

}var p1 =

newperson

("小明",18

,"男");

var p2 =

newperson

("小紅",20

,"女"

) console.

log(p1)

; console.

log(p2)

;script

>

body

>

html

>

注意:建構函式 一般首字母大寫 區別普通函式

系統物件:

陣列:var arr = new array();

日期 var now = new date();建構函式的缺點:

function

person

(name,age,gender)

; 自動幹的

this

.name = name;

this

.age = age;

this

.gender = gender;

this

.act

=function()

}var p1 =

newperson

("小明",18

,"男");

var p2 =

newperson

("小明",18

,"男");

alert

(p1 == p2)

;//位址是不一樣

/* 缺點:

每一次new乙個物件, 就會在記憶體中重新開闢乙個空間,儲存 屬性和方法

因為每一次都重新賦值了

大部分情況下:方法 **都是相同,沒有必要重新開闢空間

*/script

>

body

>

html

>

建構函式有乙個屬性叫做 prototype 原型,屬性就是物件(原型空間),可以將不同的物件的公共的屬性和方法放到原型上,當我們new乙個物件時,這個物件有乙個屬性 __proto__指向原型空間 的

只有建構函式時:

屬性和方法定義在 建構函式中 通過this關鍵字定義 浪費記憶體

原型:公共的屬性和方法放到原型中 當我們new乙個例項物件 原型中的屬性和方法只會在記憶體中儲存乙份

例項物件中有乙個屬性 __proto__自動指向 他的建構函式的原型

原型上的屬性和方法 可以直接通過 物件名.屬性名得到

注意: 原型上的this指向也是 指向 例項物件的

總結:建構函式結合原型 一般會在建構函式上 定義屬性 (理解變數),在原型中,定義方法(函式)

物件的consturctor屬性 得到例項物件的建構函式

instanceof 判斷乙個物件 是不是某個建構函式的的例項

物件.hasownproperty(「屬性」) 判斷乙個屬性 是不是例項物件自己的屬性

原型鏈:

​ 鏈:鏈式關係 一環扣一環

每個例項物件 有乙個__proto__屬性,指向它的建構函式的prototype屬性

建構函式 往上也有建構函式 function 建構函式的 __proto__指向 function的prototype屬性

....

這種層層 的鏈式關係 叫做原型鏈

關於javascript物件導向和原型

ecmascript有兩種開發模式 1.函式式 過程化 2.物件導向 oop 物件導向的語言有乙個標誌,那就是類的概念,而通過類可以建立任意多個具有相同屬性和方法的物件。但是,ecmascript沒有類的概念,因此它的物件也與基於類的語言中的物件有所不同。二.建立物件 建立乙個物件,然後給這個物件新...

物件導向與原型2 原型

1.我們建立的每個函式 或稱建構函式或物件 都有乙個 prototype 原型 屬性,這個屬性是乙個物件 這個物件下有個prototype屬性,而這個屬性其實是另外乙個物件的引用,這個屬性就是乙個物件 它的用途是 包含可以由特定型別的所有例項共享的屬性和方法 prototype共享放到其中的屬性和方...

物件導向原型prototype

function tab name,age tab.prototype.init function var tab new tab haha 18 console.log tab.init console.log tab.content 每次新建乙個例項都會在記憶體中建立content 有點低效,解...