面向對象的三大特性: a) 把一些屬性和方法裝到一個對象里 2. 繼承 a) js中的繼承是指: b) 混入式繼承 for … in 1. 父類的屬性和方法在所有之類 3. 多態 a) JS中沒有相應的體現 b) 在強類型語言比較常見 c) 實用父類的變數接受子類的對象 d) 父類的屬性方法供所有的 ...
面向對象的三大特性:
- 封裝
a) 把一些屬性和方法裝到一個對象里
2. 繼承
a) js中的繼承是指:
- 一個對象沒有一些方法和屬性,而另一個對象有
- 把另一個個對象的屬性和方法,拿過來自己用,這就是繼承
b) 混入式繼承 for … in
1. 父類的屬性和方法在所有之類
3. 多態
a) JS中沒有相應的體現
b) 在強類型語言比較常見
c) 實用父類的變數接受子類的對象
d) 父類的屬性方法供所有的子類共用
創建對象的方式
1. 創建對象
四種方法:
1、字面量創建
用一個創建一個,不能復用。會造成代碼亢餘,資源浪費
2、內置構造函數創建對象
1、內置構造函數創建對象
1. var p = new Object();
2.var arr = new Array();
3. 創建出來的對象都是空對象,要手動添加屬性,造成代碼重覆
3、 封裝簡單的工廠函數(不推薦)
function creatObj(name, age){ var obj = { boj : name; obj: age; sayHello : function(){ console.log(''); } } return obj; }
4、 自定義構造函數
function Porple(data1,data2){ this.xx = data; }
構造函數是乾什麼用的?
在JavaScript中,構造函數是給對象添加屬性,初始化屬性用的。
對象的創建過程
var p = new Person();
以上面這個p對象創建為例:
-
首先使用new關鍵字創建對象,類似於使用
{}
,這個時候創建出來的對象是一個"沒有任何成員"的對象。這裡需要註意兩點:- 使用
new
關鍵字創建的對象,對象的類型就是創建這個對象使用的構造函數的函數名 - 使用
{}
創建對象,對象的類型一定是Object
,相當於使用了new Object()
- 使用
-
使用構造函數為其初始化成員
- 在構造函數調用開始的時候,有一個賦值操作,也就是讓
this = 剛創建出來的對象
- 在構造函數中,
this
就代表剛創建出來的對象
- 在構造函數調用開始的時候,有一個賦值操作,也就是讓
-
在構造函數中,利用對象的動態特性,為對象添加成員
自定義構造函數
function Porple(data1,data2){
this.xx = data;
}
- 概念:用來實例化對象,並且給初始化對象賦值
- 構造函數名首字母大寫
- 構造函數一般和new關鍵字一起使用
- 構造函數返回值預設為新創建好的對象,如果手動設置返回值
a) 返回值類型如果不是Object類型的都還返回創建的對象
b) 如果是Object類型的就返回object
a) 對象字面量{},創建對象
b) 自定義構造函數,創建對象
- 構造函數也是函數,通常用來初始化對象
- new用來創建對象
- 構造函數用來初始化函數
- 構造函數名要大寫,
c) 構造函數的執行過程
- 使用new關鍵字創建對象
- 調用構造函數把新創建出來的對象賦值給構造函數的this關鍵字
- 在構造函數內實用this為新創建出來的對象添加成員
- 預設返回新創建的這個對象
- 如果return一個空值,或者return一個基本類型數據仍舊是返回新創建的對象
a) 返回undefined和null都是返回新對象
- 如果return的是object類型,將返回return後面的對象
- 函數名加括弧就是調用函數
- 不寫括弧是把函數整體代碼賦值給另一個變數
- 如果調用函數的時候不給構造函數實參,構造函數不會創建新對象,裡面的this將會指向window,添加的屬性也會添加給window
- 如果構造函數沒有參數,可以不寫括弧調用
對象成員:屬性和方法
原型、
- 每一個函數在定義的時候,都會有跟它關聯的一個對象被創建出來
- 每一個由構造函數創建出來的對象,都會預設的和構造函數的神秘對象關聯
- 當使用一個方法進行屬性或者方法訪問的時候,會先在當前對象內查找該屬性和方法
- 如果當前對象內未找到,就回去跟它關聯的神秘對象內進行查找
- 訪問構造函數的原型
a) 構造函數.prototype
2. 構造函數.prototype.新屬性 = 屬性值
3. 自己和原型中都有的屬性,優先用自己的
3. 創建一個對象叫做實例化對象
a) 通過構造函數創建對象創建對象的過程
4. 實例
a) 通過構造函數實例化出來的對象就是該構造函數的一個實例
5. 原型的實用方法:
a) 利用對象的動態特性給原型對象添加屬性
6. 直接替換原型對象
Porple.prototype = {
name : ‘Jack’,
}
a) 直接替換原型對象出現的問題
- 在替換原型之前創建的對象的原型 和在替換原型之後創建的對象的原型 不是同一個
- 替換不是修改
b) 點語法進行屬性賦值的時候,不會去原型查找
c) 使用點語法賦值的時候,如果對象中不存在該屬性,就會對該對象新增屬性,不會去原型中查找
d) 如果原型總分的屬性是引用類型的屬性,那麼所有的對象共用該屬性,並且一個對象修改了該引用
類型中的成員,所有對象都會被修改
e) 一般不會把屬性放置到原型中
7. 通過構造函數訪問原型
a) 構造函數.prototype
8. 通過對象訪問原型
a) 對象.__proto__ //不推薦使用
9. constructor:原型對象的屬性