對象
所有客觀存在的事物和抽象的規則計劃或者事件等。
- 屬性的無序集合體(代碼的角度)
一、 一切皆對象
數組 函數 字符串 數值 布爾值…
二、屬性
- 屬性: 可以用值來描述的屬性
- 方法: 用函數來描述的屬性
三、類
對於具有相同或者相似屬性的對象的抽象描述。
類的具體化(實例化)就是對象。
在js當中通過構造函數來實現類的。
在js當中得到對象就可以通過實例化構造函數。
四、語法
-
得到對象的方式
- JSON 方式 javascript原生對象描述法,就是在js當中清楚的展示一個對象內部結構的語法。屬性:值 這種形式可以直接被替換爲一個變量,變量名就是屬性名 變量值就是屬性值
- 實例化構造函數的形式。
- 自己定義構造函數
- 實例化
var arr=new Array(); var fun=new Function();
- 實例化頂層構造函數 Object
-
對象的添加
- 在使用之前就已經添加好的 在JSON或者在構造函數當中
- 在使用可以添加
- 對象.屬性=值
- 對象[變量名]=值
無論通過哪種方式添加,最終的效果完全一樣的,也就是說在使用的時候是沒有任何區別的。
- 對象屬性的訪問
- 對象.屬性
- 對象.屬性();
- 對象[變量名]
- 對象[變量名]();
- 對象屬性的遍歷
- for(var i in obj){}
五、繼承
在js當中,每一個對象都可以通過一些方式擁有另一個對象的所有的屬性和方法,這種形式我們稱爲繼承,在這裏我們所說的另一個對象就被當前這個對象的原型。
- 實現繼承 兩種方法
- 將當前對象的構造函數的prototype屬性賦值爲原型對象就可以實現繼承。
- 對象冒充 call/apply、
function Human(name) { this.arms=2; this.name=name; } function Student(n){ Human.call(this.n); } var someone=new Student("lisi"); //{arms:2,name:"lisi"}
六、this
-
在構造函數中 構造函數的prototype屬性 也就是將要實例化出來的對象的原型
-
在普通函數中 window對象
-
如果是某一個對象的方法,那麼無論是在哪裏定義的,方法當中的this指的都是當前調用這個方法的對象。
-
call/apply 改變當前函數在調用的時候this所代表的對象。
在原型裏存放方法的時候.call在傳參的時候直接傳參 apply則需要以數組的形式傳參