物件的單體模式和麵向物件
阿新 • • 發佈:2021-01-21
-
1.物件的三大特性:封裝 繼承 多型
-
// 函式的作用:封裝程式碼,使其可複用,解決程式碼的重用問題
-
// 繼承:少寫 特點:擁有父類的所有屬性和方法,還可以有自己的屬性和方法
-
// 多型:解決程式碼的可重性, 解耦合!
-
2.物件的單體模式
為了解決箭頭函式this指向的問題 推出來一種寫法 物件的單體模式
-
<script> var person = { name:'小胡', age: 18, fav(){ console.log(this.name, this.age); } }; person.fav();
-
3.面向物件
-
JavaScript 語言中,生成例項物件的傳統方法是通過建構函式。
-
es5構造物件: 使用建構函式來建立物件
-
// 1./*給物件添加了兩個屬性*/ function Animal(name,age/*形參*/){ /*為建構函式*/ // 點語法:set語法和get語法 this.name = name; this.age = age; } // 2.給物件新增方法 // 語法格式:class_name.prototype.method_name = function(first_argument) {};
上面這種寫法跟傳統的面嚮物件語言(比如 C++ 和 Java)差異很大,很容易讓新學習這門語言的人感到困惑。
ES6 提供了更接近傳統語言的寫法,引入了 Class(類)這個概念,作為物件的模板。通過
class
關鍵字,可以定義類。基本上,ES6 的
class
可以看作只是一個語法糖,它的絕大部分功能,ES5 都可以做到,新的class
寫法只是讓物件原型的寫法更加清晰、更像面向物件程式設計的語法而已。 -
上面的程式碼用 ES6 的
class
改寫,就是下面這樣 -
es6方法建構函式,是使用class構造的,{}中為物件的單體模式,給物件新增方法,使用物件的單體模式新增(函式用fav(){}格式),
class Animal{ // 構造器 當你建立例項之後 constructor()方法會立刻呼叫 通常這個方法初始化物件的屬性 constructor(name,age){ this.name = name; this.age = age; } // 一定不要加逗號,加了會報錯 showName(){ console.log(this.age); } } var a2 = new Animal('小胡',12);
a.showName1(); /*打印出來'12'*/
上面程式碼定義了一個“類”,可以看到裡面有一個constructor
方法,這就是構造方法,而this
關鍵字則代表例項物件。也就是說,ES5 的建構函式Animal,對應 ES6 的Animal類的構造方法。
Animal類除了構造方法,還定義了一個showName方法。
注意,定義“類”的方法的時候,前面不需要加上function
這個關鍵字,直接把函式定義放進去了就可以了。
方法之間不需要逗號分隔,加了會報錯。
ES6 的類,完全可以看作建構函式的另一種寫法。
console.log(Animal2===Animal2.prototype.constructor);//true
上面程式碼表示,類本身就指向了類的建構函式。
使用的時候,也是直接對類使用new
命令,跟建構函式的用法完全一致。
constructor方法
constructor
方法是類的預設方法,通過new
命令生成物件例項時,自動呼叫該方法。一個類必須有constructor
方法,如果沒有顯式定義,一個空的constructor
方法會被預設新增。
class Animal { } // 等同於 class Animal { constructor() {} }