class Drag{
//静态属性
static height = "178cm"
static test() {
console.log("test")
}
constructor(){
this.name = "张三"
}
hobby(){
console.log("篮球")
}
}
let drag1 = new Drag()//实例化对象没有height
console.log(Drag.height)
console.log(Drag.test())
Drag的type是函数function
static定义属性或者方法后,只能由类直接去调用,而不能由实例化对象调用
静态属性只属于类,不属于对象
2,类的继承
使用extends/,需要在constructor中调用super
class LimitDrag extends Drag {
constructor(age){
super(age);//
}
}
let darg2 = new LimitDrag(20)
console.log(darg2.age)
扩展方法:可以直接在子类中覆盖掉父类的逻辑
或者在子类中使用super去调用父类的功能,然后再续写
class LimitDrag extends Drag {
constructor(age){
super(age);//
}
setStyle(){
super.setStyle()
console.log("子类逻辑")
}
}
3,包装对象
针对String,number,boolean
会对这三种包装对象
let str = "a b c"
// let arr = str.split(" ")
// console.log(arr)
function mySplit(str,method,arg){
let temp = new String(str)
return temp[method](arg)
//销毁包装对象
}
系统生成一个临时对象,然后包装,包装对象中拿到方法,拿到结果,再return出来,最后销毁包装对象。
let arr = mySplit(str,"split"," ")
模拟系统做的事情
3,常用方法
hasOwnProperty() //判断是不是对象自身的属性
contructor //判断是哪个构造函数构造出来,判断类型
let arr = [1,2,3,4]
console.log(arr.constructor === Array)
所有函数都有原型,因为函数也是对象
instanceof //不仅判断构造函数是否有关系,也会判断原型
let arr = []
console.log(arr instanceof Array) //true
console.log(arr instanceof Object) //true
typeof //判断类型,不能精确判断
let arr = []
let obj = {}
console.log(typeof arr) //Object
console.log(typeof obj) //Object
精确判断,Object.prototype.toString.call(arr)