函数的二义性
来源:函数的二义性
二义性
一个普通函数有两种使用方式:
1 | function a() {} |
这样就会产生问题:这个函数,什么时候该调用,什么时候该实例化?
开发者有一套自定规范:小驼峰命名法的函数用于调用;大驼峰命名法的函数用于实例化,但这毕竟只是村规,该不严谨照样不严谨
new运算符其实就是在获取以函数自身的属性构成的对象,也就是函数的this
1 | function a() { |
函数自身的this等于函数new出的最新一个实例,而旧的实例会变成其副本
1
2
3
4
5
6
7
8
9
10
11
12
13 let aaa
function a() {
this.name = 'yajue'
this.age = 24
console.log(this)
aaa = this
}
let bbb = new a()
let ccc = new a()
console.log(aaa === bbb) // -> false
console.log(aaa === ccc) // -> true
console.log(bbb === ccc) // -> false
箭头函数和类
ES6引入的箭头函数和类,其中一个意义就是能消除ES5函数的二义性
众所周知,箭头函数中的this指向上下文而不是函数自己的属性、所以箭头函数不能创建自身属性,不能被实例化
此外,箭头函数没有prototype、arguments、super等属性,不能展现继承关系等
所以把实例化交给类吧,它有
评论