對(duì)象
對(duì)象戏仓,一種容器(聚合或復(fù)雜數(shù)據(jù)類型)
對(duì)象屬性枚舉
屬性的順序是無序的
- for……in
const obj = { a: 1, b: 2, c: 3 };
for (let p in obj) {
if (!obj.hasOwnProperty(p)) continue;
console.log(`${p}:${obj[p]}`);
}
for……in循環(huán)不會(huì)枚舉符號(hào)類屬性
- Object.keys
Object對(duì)象提供的一種枚舉字符串屬性的方法儿子,并返回一個(gè)數(shù)組
const obj = { a: 1, b: 2, c: 3 };
Object.keys(obj).forEach(p => console.log(`${p}:${obj[p]}`));
Object.keys也不會(huì)枚舉符號(hào)類屬性
類的創(chuàng)建和實(shí)例化
class Shape {
constructor(...props) {
}
}
let shape = new Shape();
JavaScript類中沒有訪問權(quán)限的限制
類即是函數(shù),類只不過是ES6中提供的一個(gè)語法,實(shí)際類還是函數(shù)
類中使用this,this指的是引用方法被調(diào)用時(shí)所綁定的實(shí)例
class ES6Class {}
function ES5Class() {}
console.log(typeof ES6Class); //function
console.log(typeof ES5Class); //function
原型
- 每個(gè)函數(shù)都有一個(gè)prototype屬性
- 使用new創(chuàng)建實(shí)例時(shí)渗勘,會(huì)將原型對(duì)象存儲(chǔ)到自己的proto屬性中
原型的動(dòng)態(tài)調(diào)度
當(dāng)試圖訪問對(duì)象的某個(gè)屬性或方法是呼胚,如果它不存在于當(dāng)前對(duì)象中,JavaScript會(huì)檢查它是否存在于對(duì)象原型中孝扛。
class Shape {
constructor(...props) {
}
area() {
console.log('area function');
}
}
const shape = new Shape();
console.log(shape.area === Shape.prototype.area); // true
shape.area(); //調(diào)用的是原型中area方法
shape.area = () => console.log('my area');
shape.area(); //調(diào)用的是我們新賦值的area方法
靜態(tài)方法
靜態(tài)方法不于實(shí)例綁定,它和類相關(guān)聯(lián)
class Shape {
static showInfo() {
console.log('this is Shape class')幽崩;
}
}
Shape.showInfo();
繼承
class Shape {
}
class Rectangle extends Shape {
constructor() {
super();
}
}
extends關(guān)鍵字苦始,表示Rectangle繼承自Shape
super函數(shù),父類的構(gòu)造器慌申,子類的構(gòu)造函數(shù)必須調(diào)用這個(gè)方法
原型鏈
如果一個(gè)方法沒有在對(duì)象原型中找到其定義陌选,它就會(huì)檢查原型的原型,這樣就形成了一個(gè)原型鏈蹄溉;JavaScript會(huì)沿著原型鏈一直找下去咨油,如果沒有找到,最終程序會(huì)報(bào)錯(cuò)柒爵。
多態(tài)
多態(tài)役电,一個(gè)實(shí)例不僅是它自身類的實(shí)例,也可以被當(dāng)做它的任何父類的實(shí)例來使用.
JavaScript中所有對(duì)象都是Object的實(shí)例棉胀。