class
可以看做是建構函式的語法糖,class
在功能上更加完善
class
中原型方法的寫法
class
student
}
直接在大括號裡面新增方法就是新增到原型裡面,對比建構函式在原型中新增方法student.prototype.show=function(){}
更加方便
在class
中新增的原型方法,還有乙個好處就是在遍歷屬性的時候,不會被遍歷(利用for in
迴圈遍歷)到,class
關鍵字給我們做了處理,而且在class
中新增的方法中的this
,如果沒有呼叫者,預設為undefined
,而不是windon
,也即是預設為嚴格模式
關鍵字static
的理解
所謂的靜態屬性和方法,就是把建構函式當做物件使用,把屬性和方法寫在建構函式身上
static
靜態方法的應用:利用類來管理乙個商品的資訊,可以獲得商品的總價和最貴商品的名字
//使用靜態方法對商品的管理
let goodslist =[,
,,]//先定義乙個類----重點
class
carstatic
createbatch
(data)
static
totalprice
(data)
static
maxprice
(data)
getprice()
getname()
}let car = car.
createbatch
(goodslist)
//這裡得到了每個例項化物件的陣列,map對原來的陣列進行處理返回新陣列
console.
log(car.
maxprice
(car)
.name)
//得到最貴的商品的**名字
console.
log(car.
totalprice
(car)
)//得到所有商品的總價
關鍵字super
的理解
super的出現原因:看如下**,當我們自身有父類有相同的方法,我想用父類的方法,在繼承了第一次的時候,我們可以在子類中this.__proto__.show.call(this)
使用父類,但是在如果上面還有繼承的時候,這種方法就行不通,會造成this
的指向混亂,死迴圈,所有利用super
可以輕鬆解決這個問題
//繼承時候兩層的時候可以this--多層不行---所以出現了super,會自動改變this指向
const all =
}const person =
}const p =
} p.
show()
//小凡哈哈
要求:在子類中如果有constructor
,則一定要在constrcutor
中使用super
,而且constructor
中有關this
的設定都要放到super
之後,這樣是為了提高子類的優先順序
先來看為什麼有了constructor
就必須要super,我們先從建構函式入手(因為class
相當於建構函式的語法糖)
在建構函式總,如果想用繼承父級的屬性,我們一般這麼幹
function
user
(name, age, ***)
function
admin
(...args)
let hd =
newadmin
("小凡",16
,"男"
) console.
log(hd)
在class
中我們是把為每個物件設定的屬性放到了constructo
r中,為了要繼承父類的屬性,所以需要執行的是相當於父類函式,也即是constructor
這個函式,super
的作用就是幫我們執行了這個函式,並改變了this的指向,那為什麼this
需要放在super
之後呢,我們且看下面的例子
class
parent
}class
children
extends
parent
}let ch =
newchildren
("凡"
) console.
log(ch.name)
//小凡
我們可以看到最後的名字是小凡,而不是凡,確保了子類的優先順序高於父類
利用super
可以訪問父類方法
class
parent
}class
children
extends
parent
info()
}}let data =[,
,,]let xf =
newchildren
(data)
console.
log(xf.
info()
)//
方法的重寫,不影響父類的方法,可以向用先在子類中寫乙個父類一樣的方法,然後在子類方法中利用super
訪問父類方法,然後拿到父類方法得到的結果修改 C 中struct關鍵字和class關鍵字的區別
剛開始接觸 c 看到 中有struct關鍵字,還以為是用了結構體,結果後來發現 struct 和 class 一樣都用於類的定義,於是把兩者的差別記錄於此。一句話總結 兩者均可用於定義類,唯一的區別是兩者定義的類的預設訪問許可權有差別。其實比兩者差別更重要的是,我很好奇為什麼 c 中會存在兩個用於定...
js中的this關鍵字
普通函式 window functionfn fn window 事件函式 指向事件源 var btn document.queryselector button btn.onclick function 定時器 中也是window setinterval function 1000 預保留this...
JS中的this關鍵字
js中的this代表的是當前行為執行的主體 js中的context代表的是當前行為執行的環境 區域 this是誰和函式在哪定義的和在哪執行的都沒有任何的關係,這和它的執行主體有關。function fn var obj fn window obj.fn obj function sum sum wi...