JS 基础
JS 原型
原型、构造函数、实例
- prototype:原型对象,每一个
js
对象都有__proto__
属性指向该对象的原型,可以通过obj.__proto__
进行访问(es6
之前为非标准属性)。 - 构造函数:可通过
new
来创建实例的函数。 - 实例:
new
出来的实例对象,通过__proto__
指向原型,原型通过constructor
指向构造函数。
原型链
原型链由原型对象组成,每个对象都有 __proto__
属性,指向创建该对象的构造函数的原型,原型也是个对象,也有 __proto__
属性指向它的构造函数的原型,直至指向 null
,这样通过 __proto__
属性连起来的链则称为 原型链。
闭包
闭包是指有权访问另一个函数作用域中的变量的函数。通常用于延长作用域链,保护局部变量防止被垃圾回收。
this
函数在执行时才会确定 this
指向,一般来说谁调用就指向谁。
- 全局
this
指向window
ie
事件对象中this
指向window
,并不指向当前元素setTimeout
中this
指向window
- 构造函数中
this
指向实例对象 - 箭头函数无
this
,其中的this
指向为外层非箭头函数指向
箭头函数的理解
- 无原型,即没有
prototype
属性 - 无
this
,this
为外层非箭头函数的this
- 无
arguments
,可以通过剩余参数来模拟获取 - 无
super
- 不能通过
new
关键字创建
箭头函数的意义(箭头函数与普通函数的本质区别)
ES6
箭头函数的提出是为了消除函数的二义性。
早期 js
设计简单,普通函数即作为函数调用,也作为类使用,但这就容易导致混乱,虽然可以通过函数名首字母大写来约定是类,但总有不规范书写或随意混用的情况。
所以 ES6
中做了新的规范,函数使用箭头函数声明,类则用 class
声明。