[TOC]
## JS的繼承是基于原型的繼承
* 面向對象編程很重要的一個方面,就是對象的繼承。A 對象通過繼承 B 對象,就能直接擁有 B 對象的所有屬性和方法。這對于代碼的復用是非常有用的。
* 大部分面向對象的編程語言,都是通過“類”(class)來實現對象的繼承。JavaScript 語言的繼承則是通過“原型對象”(prototype)。
### 1.構造函數的缺點
JavaScript 通過構造函數生成新對象,因此構造函數可以視為對象的模板。實例對象的屬性和方法,可以定義在構造函數內部。
```
var Person = function(name,age){
this.name = name;
this.age = age;
}
var chengchao = new Person("程超",18)
console.log(chengchao.name); //"程超"
console.log(chengchao.age); //18
```
> 通過構造函數為實例對象定義屬性,雖然很方便,但是有一個缺點。同一個構造函數的多個實例之間,無法共享屬性,從而造成對系統資源的浪費。
```
//eg:
var Person = function(name,age){
this.name = name;
this.age = age;
this.see = function(){
console.log(this.name+"愛看片")
}
}
var chengchao = new Person("程超",18)
chengchao.see();
```
### 2.這個問題的解決方法,就是 JavaScript 的原型對象(prototype)
```
var Person = function(name,age){
this.name = name;
this.age = age;
}
Person.prototype.see = function(){
console.log(this.name+"愛看片")
}
var chengchao = new Person("程超",18);
var lisi = new Person("李四",19);
chengchao.see();
lisi.see();
```
> 在原型上生成see方法,所有的對象共享改方法

> Eg:像數組字符,的一些常用的方法就是放在原型上
```
Array.prototype.getMax = function(arr){
return Math.max(...arr);
}
var arr = [1,2,3];
arr.getMax(arr);
//在數組的原型上定義一個say方法,所有實例化的對象都擁有了say方法
```
JavaScript 繼承機制的設計思想就是,原型對象的所有屬性和方法,都能被實例對象共享
總結一下,原型對象的作用,就是定義所有實例對象共享的屬性和方法
```
var Person = function(name,age){
this.name = name;
this.age = age;
}
Person.prototype.see = function(){
console.log(this.name+"愛看片")
}
Person.prototype.sex="男";
Person.prototype.like ="看美女";
var chengchao = new Person("程超",18);
console.log(chengchao.like);
```
- 效果實例
- 1.點擊增加高度
- 2.tab頁面切換
- 3. 列表切換
- 4. 隔行變色
- 5. swiper 輪播
- 6.vue
- 7.定時器
- 8. 向表格中添加數據
- 9 瀑布流
- 1.JavaScript基礎
- 1. 變量
- 2. 調試
- 3.數據類型
- 4.轉換
- 5.控制語句
- 6.運算
- 7. this
- 8 JSON對象和javascript對象的相互轉換
- 2.JavaScript的控制語句
- 1. 基本控制語句
- 2.節點
- 2.1DOM補充
- 3. 函數
- js的模塊化如何解決
- 不知道有什么用的
- 4.數組
- 5. String
- 補充
- 6.Ajax
- 1. 原生Ajax
- 2. HTTP/get/post
- 3.jQuery-Ajax
- 4.跨域
- 5.axios
- 6.封裝
- Ajax效果
- ajax補充
- 7. 正則
- 1.創建正則表達式
- 2. 正則的api
- 3.正則語法
- 4.例子
- 量詞
- 8.面向對象
- 1.原型
- ES6
- 模塊化
- 1.回調地獄
- 什么是回調地獄
- 簡單封裝
- promise解決回調地獄
- generator解決回調地獄
- async解決回調地獄
- 2.封裝
- Ajax,promise
- JavaScript難點
- 1. 閉包/作用域
- 2.原型鏈
- 3. 兼容性
- 適配
- JavaScript小效果
- 字符串截取