es6 class 语法注意的几点

注意的几个点 :

  • class中定义的方法, 均为原型方法
class F{
	say(){}
}
F.prototype.hasOwnProperty('say') //true
  • class 中定义的属性, 均为实例属性, 而非在原型上, 并且构造函数中定义相同属性会覆盖class中的定义
class W {
	a = 1
	constructor(){
		this.a = 2
	}
}
let w = new W()
w.hasOwnProperty('a') //true
w.a // 2
  • 类本身指向构造函数
Object.getPrototypeOf(w).constructor === W
  • class 没有写构造函数, 会自动创建一个, 并返回this
  • es5不同的是, 类中定义的方法是不可枚举的, es5prototype写法可以
//class
class F {
	say(){}
}
Object.keys(F.prototype)    // []

// es5
function G() {}
G.prototype.say = function(){}
Object.keys(G.prototype)   // ['say']
  • __proto__ 并不是语言本身的特性,这是各大厂商具体实现时添加的私有属性,我们可以使用 Object.getPrototypeOf
  • static修饰的方法不会被实例继承, 静态方法, 只能被类调用, 可以与实例方法重名
class H	{
	static say(){ 
		console.log(1)
	}
	say(){
		console.log(2)
	}
}
let h = new H()
h.say()  // 2
H.say()  // 1
  • 使用extends继承时, 若子类显式地写了构造函数, 那么构造函数 中必须调用super(), 子类未显式写构造函数则不用
  • class中可以写get, set
class K{
	get a(){
		return this.b
	}
	set a(val){
		this.b = val
	}	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值