談談物件導向

2021-07-22 14:43:57 字數 1816 閱讀 2649

相信不少人也迷惑物件導向是什麼?該怎麼理解?這是乙個令人相當頭疼的問題,以前有個大神給我講過,在這裡整理一下,留作紀念,希望能幫到大家,也歡迎各位大牛指導。

所謂物件,無賴的理解就是萬物皆物件,一般在大型專案中必須要使用物件導向程式設計(oop)。優點是能夠更好地建立模型,使**更加清晰,易於維護,當然逼格也更高了(ps:不管大小公司面試必須會問物件導向,瞬間就覺得高大上了;)一般來說越是逼格高的東西就越是不好理解。物件導向需要較強的思維形象化能力,面向過程易於理解,但是物件導向對於初學者確實有點難以理解;

之前看過一些教程,粗淺的講了一些,最後總結一下,大致就是,把函式裡面的方法轉化成屬性,函式裡面的行為(巢狀的函式)轉化為方法,再把事件物件改寫成this。但是呢,這樣說畢竟有些抽象,過於籠統,所以作為前端小白的我整理了一些關於物件導向的知識。話不多說,下面見**;

1、首先呢,我們用字面量建立乙個物件,如下

var obj = 

}

如果還有乙個 obj1 也想要輸出 this.name ,我們也可以再建立乙個字面量,但是呢使用字面量建立物件同樣有缺點:如果想要建立大量具有相同屬性或者方法的物件,需要書寫大量重複的**。 很顯然這是不可取的。這是boss和程式設計師們罪不可忍受的。於是乎就出現了下面這種模式。

2、工廠模式-工廠模式是把一些零件交給工廠,由工廠組裝成成品,然後再返回成品。**如下

function person(name,age,sayname);

return obj;

}person("abc",10,function());

工廠模式雖然解決了**大量重複的問題,但是我們只是知道工廠是個物件,並不知道它是用來做什麼的,就是說並不知道工廠(person)是屬於誰的例項。於是乎再為了解決這個問題就出現了建構函式(ps:距離物件導向又進了一步)。

3、建構函式模式(建構函式記得第乙個字母大寫),不需要再考慮工廠是屬於哪個的例項。誰建立了新例項,this就是指向誰。

function person(name,age)

}var p = new person("abc",15);

var p2 = new person("def",20);

p.sayname();

p2.sayname();

console.log(p.sayname == p2.sayname);

p被稱為person類的乙個例項,這個例項可以共享person類的所有屬性或方法.裡面的p和p2列印輸出並不相等,因為new出來之後是屬於兩個完全不相同的例項。建構函式同樣也會出現很多具有相同作用的方法,但是這些方法沒必要。於是又出現了下面的方式。

4、原型+建構函式模式

function person(name,age)

// person.prototype.name = "abc";

// person.prototype.age = 10;

person.prototype.sayname = function()

var p1=new person("abc",15);

var p2 = new person("def",20);

p1.sayname();

p2.sayname();

console.log(p1.sayname == p2.sayname);

console.log(p1.sayname === p2.sayname);

這段**列印出來,會是兩個 true,具有相同的例項。大家看一下,是不是和剛剛開始說的一樣呢,方法轉化成屬性,函式給轉化成方法了。這樣一層層寫下來就非常容易理解了。

談談物件導向的陷阱

一 繼承 物件導向可以繼承,而對於實際開發中,往往很難比價好的做抽象,進而出現濫用繼承的情況。如下面的 對於testanimal的call方法來說,單純從 上看,它應該是呼叫human的walk方法。而實際上呼叫的確實cat的方法,從而導致了可讀性的混亂。public abstract class ...

物件導向思想 談談你對物件導向的理解

物件導向程式設計,即oop,物件導向的概念和應用已經超越了程式設計 軟體開發領域,現在已經發展到了各個領域。物件導向可以說是對現實世界理解和抽象的方法,是計算機程式設計技術發展到一定階段的產物。它的特點 抽象 封裝 繼承 多型 用我的話說,其實可以這麼理解,假如我是上帝,我要造 人 這是物件 首先,...

簡單談談PHP物件導向之標識物件

標識物件模式 這個模式主要功能就是建立sql語句中的wehre條件字串的,下面直接看 和注釋 namespace woo mapper 字段物件 class field 新增where 條件 function addtest operator,value 獲取存放條件的陣列 function get...