prototype
简单地说,JavaScript 是基于原型的语言。
当我们调用一个对象的属性时,如果对象没有该属性,JavaScript 解释器就会从对象的原型对象上去找该属性,如果原型上也没有该属性,那就去找原型的原型,直到最后返回 null
为止,null没有原型。这种属性查找的方式被称为原型链(prototype chain)。
new
当 js 语言执行 new
操作时具体时执行的什么操作呢?
创建一个空对象
u = {}
绑定原型,
u.__proto__ = User.prototype
或Objet.setPrototypeOf(u, User.prototype)
;调用
User()
函数,并把空对象u
当做this
传入,即User.call(u)
;如果
User()
函数执行完自己return
一个object
类型,那么返回此变量,否则返回this
。PS:如果构造函数返回基本类型值,则不影响,还是返回
this
箭头函数与普通函数
区别:
- 箭头函数不会创建自己的
this
:它会从自己的作用域链上继承一个this
; - 箭头函数的
this
永远不变:它的this
在被定义时就已经确定了(call
/apply
/bind
都无法改变箭头函数的指向); - 箭头函数不能作为构造函数使用(本质是因为
this
无法改变); - 箭头函数没有自己的
argument
,没有prototype
; - 箭头函数不能使用
yeild
关键字;