物件導向 建立物件

2022-02-28 18:17:45 字數 3389 閱讀 3389

1.面向過程的思維方式:

就是把解決問題的關注點,放到解決問題的每乙個詳細的步驟上面!

物件導向的思維方式:(物件導向就是一種思維方式,與**關係不大)

就是把解決問題的關注點,放到解決問題需要的一系列物件身上

1、什麼是物件!!!!  萬物皆物件

2、物件的特徵

物件的特徵就是用來描述物件的相關資訊

比如乙個人物件,特徵就有:name  age  gender  height

3、物件的行為

物件行為就是描述物件的行為

比如乙個人物件,行為就有:吃 跑 跳 睡 唱 抽菸 喝酒 燙頭

4、在js當中 什麼是物件?

鍵值對兒的組合就是物件

其中值可以是資料或函式

5、現實生活中的物件的特徵對應到js當中是物件的屬性!

6、現實生活中的物件的行為對應到js當中就是物件方法!

建立物件的方式:

1. 物件字面量

只能建立一次物件,復用性較差,如果要建立多個物件,**冗餘度太高

2.使用內建建構函式(array,object)       建構函式本身也是函式,只不過可以用來建立物件而已

var obj = new

object();

obj.name = "一千個傷心的理由";

obj.singer = "張學友";

obj.sing = function

()

var obj1 =new

object();

obj.name = "一千個傷心的理由";

obj.singer = "張學友";

obj.sing = function

()

要建立 person

的新例項,必須使用 new

操作符。以這種方式呼叫建構函式實際上會經歷以下 4

個步驟:

(1) 建立乙個新物件;

(2) 將建構函式的作用域賦給新物件(因此 this

就指向了這個新物件);

(3) 執行建構函式中的**(為這個新物件新增屬性);

(4) 返回新物件。

任何函式,只要通過 new

操作符來呼叫,那它就可以作為建構函式;而

任何函式,如果不通過 new

操作符來呼叫,那它跟普通函式也不會有什麼兩樣。

建立出來的物件都是空的物件,要手動的去為物件新增屬性。造成**重複。

建構函式的執行過程

1.使用new關鍵字建立物件

2.呼叫建構函式,把新建立出來的物件賦值給建構函式內的this

3.在建構函式內使用this為新建立出來的物件新增成員

4.預設返回新建立的這個物件 (普通的函式,如果不寫返回語句,會返回undefined)

建構函式的返回值

1.如果不寫返回值,預設返回的是新建立出來的物件 (一般都不會去寫這個return語句)

2.如果我們自己寫return語句return的是空值(return;),或者是基本型別的值或者null,都會預設返回新建立出來的物件

3.如果返回的是object型別的值,將不會返回剛才新建立的物件,取而代之的是return後面的值

建構函式存在問題

建構函式中的方法,每新建立乙個物件的時候,該物件都會重新的建立一次這個方法,每個獨享獨佔乙個方法

但是該方法內容完全相同,所以造成資源浪費

1.解決辦法1

將建構函式內的方法,進行提取,放在建構函式外面,在建構函式內部進行引用賦值

那麼建立出來的物件,都會指向建構函式外面的這個函式,達到共享的目的

問題:全域性變數增多,造成全域性變數汙染,**結構混亂,不容易維護

2.解決辦法2

使用原型

3.工廠函式(不推薦使用)

function

createsong(songname,singername)

return o;

}var obj = createsong("演員","薛之謙");

var obj1 = createsong("一言難盡","張宇");

工廠模式雖然解決了建立

多個相似物件的問題,但卻沒有解決物件識別的問題(即怎樣知道乙個物件的型別)

4.原型模式

在建構函式建立出來的時候,系統會預設的幫建構函式建立並關聯乙個物件,這個物件就是原型   原型預設的是乙個空的物件  預設的原型物件中會有乙個屬性constructor指向該建構函式

原型的作用:原型中的屬性和方法 可以被使用該建構函式建立出來的物件使用。

如何訪問建構函式的原型:建構函式.prototype。 

注意 prototype是建構函式的屬性,跟物件沒有關係。

原型物件的使用

1. 使用物件的動態特性,為原型物件新增成員

2. 直接替換原型物件

注意事項:

直接替換原型物件,會導致替換之前建立的物件的原型和替換之後建立的物件的原型不一致

原型的使用該注意事項

1.使用物件訪問屬性的時候,會現在物件中查詢,如果找到了就直接使用

如果沒有找到,就去原型中查詢

2.使用物件設定屬性的時候(點),只會在物件本身中查詢,不會去原型中查詢,如果在物件本身中沒有找到這個屬性

則給該物件新增乙個屬性,如果在物件中有這個屬性,修改這個屬性

3.如果在原型物件中有引用型別的屬性,那麼使用物件進行修改該屬性內容,則其他所有跟這個原型物件相關的物件都會受到影響

person.prototype.car = {};

var p = new person( );

p.car = {}; //這是修改屬性

p.car.brand= ""; //這是修改屬性的內容

4.一般情況下不會將屬性新增到原型物件中

只會將需要共享的方法,新增到原型物件中

__proto__

1.這個屬性不是標準屬性,所以存在通用性問題

2.一般不推薦使用這個屬性

3.除錯的時候,可以使用這個屬性

4.這個屬性是原型中的屬性(??不是例項的?)

替換原型時候的注意事項:

在新替換的原型中,沒有constructor屬性,會影響三角結構關係的合理性

so,在新替換的原型中,手動新增constructor屬性,以保證關係的合理性,賦值為關聯的建構函式

如何給原型物件新增屬性和方法?

使用物件的動態特性

當使用物件去訪問屬性和方法的時候,

會首先在物件自己內部進行查詢,如果找到了,就直接使用

如果沒有找到,就去原型中查詢,查詢到之後,使用。

如果原型中還沒有, 如果是屬性,就是undefined。

如果是方法,就報錯。

物件導向 建立物件

python中,可以根據已經定義的類去建立出乙個或多個物件。建立物件的格式為 物件名1 類名 物件名2 類名 物件名3 類名 建立物件demo class hero object 新式類定義形式 info 是乙個例項方法,類物件可以呼叫例項方法,例項方法的第乙個引數一定是self def info ...

物件導向程式設計 建立物件

方法一 物件字面量 方法二 object建構函式 方法三 工廠模式 function createperson name,age,job person.prototype.name nicholas perosn.protptype.age 29 person.prototype.job soft ...

物件導向 之建立物件

為什麼需要建立物件?使用object建構函式或物件字面量雖然可以建立單個物件,但是這樣在需要建立很多物件時,會產生大量重複的 1.工廠模式 優點 可以建立多個類似的物件 缺點 無法識別物件的型別 使用object建構函式或物件字面量雖然可以建立單個物件,但是這樣在需要建立很多物件時,會產生大量重複的...