面向對象的編程思想:根據需求,抽象出屬性和方法,定義構造函數,而後實例化對象,經過對象調用屬性和方法,完成相應的需求javascript
封裝java
把抽象出來的屬性和對方法組合在一塊兒, 且屬性值被保護在內部, 只有經過特定的方法進行改變和讀取稱爲封裝
以代碼爲例,咱們先創建一個構造函數Person,它有兩個屬性和一個方法編程
// 封裝 function Person(name,age){ this.name=name; this.age=age; this.play=function(){ console.log(this.name+'就喜歡蹦極!') } } let p1=new Person('jack',22); p1.play();
而後咱們生成一個實例對象p1,並調用構造函數的play方法。函數
p1
這個對象並不知道play()
這個方法是如何實現的, 可是仍然能夠使用這個方法. 這其實就是封裝學習
二、繼承this
能夠讓某個類型的對象得到另外一個類型對象的屬性和方法稱爲繼承
這裏使用call()方法實現繼承spa
// 繼承
function Person(name,age){ this.name=name; this.age=age; this.play=function(){ console.log(this.name+'就喜歡蹦極!') } } function Child(name,age,weight){ Person.call(this,name,age); this.weight=weight; } let child1=new Child('jane',11,55); child1.play();
三、多態prototype
同一操做做用於不一樣的對象產生不一樣的執行結果, 這稱爲多態
// 多態 function Person(name) { this.name = name; } function Student(subject) { this.subject = subject; this.study = function () { console.log(this.name + "在學習" + this.subject); } } function Teacher(subject) { this.subject = subject; this.study = function () { console.log(this.name + "在學習" + this.subject); } } Student.prototype = new Person('john'); Teacher.prototype = new Person('lucy'); let stu = new Student('歷史'); let tea = new Teacher('教學'); stu.study(); tea.study();
對於同一函數doStudy, 因爲參數的不一樣, 致使不一樣的調用結果,這就實現了多態.