炒個冷飯,設計模式(前端常用設計模式)。我們在面試的時候很多情況都需要手寫**,所以我們寫都時候盡量用es6,且裡面要用設計模式。這樣評分可以達到優秀,如果只是手寫實現出功能那麼我們只能是及格(主要面試和別人競爭)
游泳健身了解一下:github
(哈哈哈哈哈?)
你走到一棟大樓面前(哇!鋼筋,水泥,木板。。。)(面向過程)
你走到一棟大樓面前(哇!大樓)(物件導向)
複製**這個時候你應該知道啥是面對物件了,下面對比一下物件導向和面向過程
1.面向過程
其實是物件導向的底層,只是我們把這個過程寫在了物件的類上了,面向過程這樣的使用方式為啥不好,
(優勢也是有的效能好,不用去new 乙個例項,減少效能開銷)
1.不容易維護(好幾千行的**都搞一起了,寫過的都知道)
2.不容易擴充套件(好幾千行的**都搞一起了,寫過的都知道)
3.不容易復用(好幾千行的**都搞一起了,寫過的都知道)
2.物件導向
物件導向有繼承,封裝,多型的特性,物件導向優勢很容易看出,
1.容易維護
2.容易擴充套件
3.容易復用
複製**物件導向的繼承:
es6繼承
class a
}class b extends a
let b = new b()
b.afun() // b 可以繼承a的方法複製**普通常用的繼承
原型鏈繼承
function a(){}
a.prototype.afun = function() {}
function b(){}
b.prototype = new a()
let b = new b()
b.afun() // b通過原型鏈 prototype 可以呼叫到a的方法
// 問題,當前並不能執行a的方法只是繼承到來a到方法(而且a方法居然在之前就使用過一次)
建構函式
function a(a)
a.prototype.afun = function()
function b()
let b = new b()
b.a // 可以獲取到當前
// 問題,當前並不能繼承a的方法,只能使用a方法
混合使用
function a(a)
a.prototype.afun = function()
function b()
b.prototype = a.prototype
b.prototype.constructor = a
let b = new b()
console.log(b.a)
b.afun()
// 這樣就可以使用當前a的方法,不懂的小夥伴可以自己碼一下試試
複製**物件導向對封裝(隱藏物件對屬性和方法,對外部提供屬性和使用方法),提高復用性和安全性。
物件導向對多型(就是多種狀態)(同一種行為有不同表現的能力)js 並沒有提供什麼模版啥的,我們可以看下下面的
class a
}class b extends a
}class c extends a
}class abstracteat
}eat()
}// 家常菜
class 西紅柿炒雞蛋 extends abstracteat
eat()
}// 蛋糕店
class 奶油蛋糕 extends abstracteat
eat()
}
前端常用設計模式
像流水線作業,產出一樣的產品。傳參進去,操作的具體邏輯封裝在乙個方法裡,最終返回乙個物件。將new操作單獨封裝,遇到new時,就要考慮是否用工廠模式 這個creator就是乙個工廠,裡面有create函式,工廠通過create函式建立product。這樣通過create已經把真正的建構函式封裝起來,...
前端常用設計模式
前端常見的設計模式主要有以下幾種 1.單例模式 2.工廠模式 3.策略模式 4.模式 5.觀察者模式 6.模組模式 7.建構函式模式 8.混合模式 這種設計模式的思想是確保乙個類只有唯一例項,一般用於全域性快取,比如全域性window,唯一登入浮窗等。採用閉包的方式實現如下 var single f...
前端開發設計模式
高階高階前端開發之路之設計模式,衝!記錄一些學的七七八八的程式設計思維,設計模式 vue router物件是放在vue的原型鏈上的 只有get沒有set vue.prototype.router router object.defineproperty vue.prototype router 總結...