this-prototype-inherit
this
this
是动态决定的,调用函数时,除了传入在函数定义中显式声明的参数外,同时还传入了两个隐式参数:第一个是this
且必须是对象,默认window
,严格模式则为undefined
,第二个是arguments
,没传就是length
为0的类数组非严格模式下,
arguments
与函数形参一一映射,严格模式下打破了这种关系
调用函数的方式
函数调用(在非严格模式下,
this
指向全局window
对象;在严格模式下,this
指向undefined
)DOM事件函数:一般指向绑定事件的DOM元素
方法调用(
this
通常指向调用的对象,而且是最近的对象)构造函数(
this
指向新创建的对象),显式return
函数或对象,返回值不是新创建的对象,而是显式返回的函数或对象apply
与call
(this
指向call
或apply
的第一个参数),严格模式下,绑定到指定的第一个参数,非严格模式下,null和undefined,指向全局对象(浏览器中是window),其余值指向被new Object()
包装的对象优先级 new绑定 > 显式绑定(bind)> 隐式绑定 > 默认绑定
bind
bind后函数的this无法再被改变
箭头函数
没有
this
,函数体里面的this
是箭头函数定义时所在对象,不是运行时(this看上一级,若是箭头函数继续往上找,作用域是栈内存不是堆内存)不能改变this绑定,即使通过call、apply、bind
不能用作构造函数
没有原型对象
没有自己的super和new.target绑定
没有arguments,但有...
形参名称不能重复
返回对象时必须在对象外面加上括号
不可用yield,因此不能用Generator函数
IIFE无论在哪执行
this
都是window
数组的
forEach map reduce
等函数里面的函数ES5写法this始终是window,箭头函数写法this则取决于外部执行环境
practice
prototype
ES5
ES6
inherit
Last updated