一、闭包
闭包就是因为在函数中可以访问全局变量,但是全局中无法访问局部变量, 所以如果我们需要沟通全局和局部的话,需要利用在函数的内部再次生成一个函数,并且返回需要获取的变量,在我们需要反问局部变量时,只需要调用一下函数运行后的返回值即可获取到局部变量。
二、原型作用域链
原型就相当于是一个模具,用于生产实例对象,原型对象有指针指向构造函数,实例对象有指针指向原型对象,所以形成了一条原型链,原型链是js实现继承的方式。原型是js实现面向对象的方式,js就是基于原型的面向对象。作用域就是变量或者函数能作用的范围,作用域链则是需要一个变量,则会依次往上层函数寻找直到全局作用域。
三、继承
继承就是让一个引用类型继承另外一个引用类型的属性和方法。
构造函数,原型对象,实例对象的关系是:每个构造函数都有一个原型对象,原型对象都有一个指向构造函数的指针,实例对象有指向原型对象的指针。
继承有6种方式,分别是:
1.原型链继承:
将构造函数的原型设置为另外一个构造函数的实例对象,这样就可以继承另外一个构造函数的属性和方法,继续往上,则形成原型链,缺点是不能多次继承。
2.借用构造函数继承:
通过call改变构造函数的this指向,再加入需要的属性或方法再继承
3.组合继承
不仅原型链继承,同时也使用构造函数继承,缺点是生成了两个实例。
4.原型式继承:
返回一个构造好的实例对象,缺点是不能多次继承。
5.寄生式继承:
在原型式继承后得到对象后再次去对这个对象进行处理后去返回新的实例对象。
6.寄生组合式继承:
通过寄生的方式,砍掉父类的实例属性。
7.类继承:
定义一个类,在constractor中去定义属性,类中定义方法,通过new获取新的实例对象,子类通过extends继承父类,通过super()调用父类的constractor获取属性和方法,可以在子类构造函数添加新的属性或方法。
四、面向对象
在前端中,万事万物皆对象,面向对象是一种编程方法或思想,一个对象我们在js中可以理解为一个类,类有属性和方法,可以继承,也分为私有或公有。