[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);
~~~
- JS入門教程
- 第1章 JS基本語法
- 練習
- 1.1 補充教程
- 第一節 拓展
- 第2章 控制語句DOM,BOM,事件
- 第一節 錯誤機制
- 第二節 拓展
- 第三節 事件
- 1-1 事件流
- 1-2 事件處理程序
- 1-2-1 事件獲取form-input的值
- 1-2-2DOM0 級事件處理程序
- 1-2-3 DOM2級事件處理程序
- 第四節 if-else
- 第3章 DOM拓展
- 第一節 DOM
- 1.1 補充
- 第二節 DOM02
- 第三節 總結
- 1.節點層次
- 第4章 函數
- 第一節 函數就是值
- 第二節 函數的參數
- 第三節 對象的方法
- 第四節 改變this
- 第5章 數組
- 第一節 數組的方法
- 1.1 創建數數組
- 1.2增刪改查的方法
- 1.3數組檢查
- 1.4二維數組
- 1.5獲取數組中最大的值
- 第二節 數組拓展
- 1.1數組constructor 屬性
- 1.2prototype屬性
- 1.3獲取數組中最大值的方法
- 1.4補充展開語法
- 1.5from對數組迭代
- 1.6遍歷
- 1.7 數組下標集合,值的下標
- 第三節 拓展
- 第四節 瀑布流代碼實現
- 第6章 基本類型和引用類型的區別
- 第7章 字符串
- 第8章 JS內置對象
- 第9章 動畫
- 第10章 正則
- 第一節 創建正則表達式
- 第二節 string中支持正則的api
- 第三節 正則對象的屬性
- 拓展學習資料
- 第四節 語法
- 第五節 例子
- 5-1 獲取一串字符串中的數字
- 第11章 ajax
- 第一節 原生ajax
- 第二節 http,get,post
- 第三節 跨域
- 3-1 http-server跨域
- 3-2 koa-跨域
- 第四節 jquery-ajax
- 4-1 $.ajax
- 第五節 axios
- 第12章 面向對象
- 第一節 原型
- 第二節 原型鏈,繼承
- 第三節 多態
- 第四節 ajax-http
- 4-1 靜態方法http
- 第13章 cookie,LocalStorage,sessionStorage
- 13-1
- 第14章 erros
- 第15章 koa-router
- 第16章 模板化
- JS拓展教程
- 第一章 JS基礎
- 第三章 高級語法
- 2-1 閉包
- JS工具
- 第一章 百度地圖
- js框架
- mock.js
- JS特效
- 1.簡書點擊div,滾動到頂部
- 2.jquery 點擊a緩慢跳轉到對應ID
- 3.獲取滾動條距離頂部的高度
- 第二階段項目
- 2-1.豆瓣數據到mongDB