JavaScript几大核心要点概念总结

一、JavaScript(面向对象+原型理解+继承+作用域链和闭包+this使用总结)

1、面向对象:

专注于由哪个对象来解决这个问题,编程的特点就是出现一个类,从类中拿到对象,由这个对象去解决具体问题。
面向对象的三大特征就是:继承、封装、与多态。JS可以模拟实现继承和封装,但是无法模拟实现多态,所以我们说js是一门基于对象的语言,而非是面向对象的语言。
Javascript是基于原型的面向对象。对象则是依靠构造器(constructor)利用原型(prototype)构造出来的。

2、创建对象的几种方式:

a. 使用 new Object()创建
b. 工厂模式创建
c. 构造函数模式创建

3、构造函数与普通函数之间的关系:

a. 他们都是函数。构造函数也是函数,也可一像普通函数一样进行调用。做普通函数调用的时候,因为没有创建新的对象,所以this其实指向了window对象
b. 构造函数和普通函数仅仅是调用方式的不同,也就是说,随便一个函数你如果使用new的方式去使用,那么他就是一个构造函数。
c. 为了区别,如果一个函数想作为构造函数,作为国际惯例,最好把这个构造函数的首字母大写。

4、原型

a. 在javascript中,创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象。使用原型的好处可以让所有对象实例共享它所包含的属性和方法。JavaScript的继承就是基于原型的继承。
b. 我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,他的用途是包含可以由特定类型的所有实例共享的属性和方法。逻辑上可以这么理解:prototype通过调用构造函数而创建的那个对象的原型对象。使用原型的好处可以让所有对象实例共享它所包含的属性和方法。也就是说,不必在构造函数定义对象信息,而是可以直接将这些信息添加到原型中。

5、继承

所谓的继承,就是指子类和父类通过一定的关系,使子类拥有父类的某些功能。在ES6之前,javascript没有类和接口的概念,所以只能在原型链的基础上实现继承。

6、原型链

在javascript中,将原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法
所谓原型链就是当每次访问一个属性和方法时,首先从当前实例中找,如果找不到再去实例指向的原型中找。如果找不到,依次继续往上找,从而形成原型链。

7、构造函数、原型(对象)和对象之间的关系。

每个构造函数都有一个属性 prototype 指向一个原型对象,每个原型对象也有一个属性 constructor 指向函数,通过new 构造函数() 创建出来的对象内部有一个不可见的属性[[prototype]]指向构造函数的原型。当每次访问对象的属性和方法的时候,总是先从p1中找,找不到则再去p1指向的原型中找。

8、匿名函数

声明一个没有函数名的函数,就是匿名函数。
有名函数就是具名函数。

9、变量的作用域

变量的作用域指的是,变量起作用的范围。也就是能访问到变量的有效范围。
JavaScript的变量依据作用域的范围可分为:
全局变量:定义在函数外部的变量就是全局变量。
全局变量的作用域是当前文档,也就是当前文档所有的JavaScript脚本都可以访问到这个变量。
局部变量:局部变量的作用域是局部变量所在的整个函数的内部。 在函数的外部不能访问局部变量。

10、作用域链

所谓的作用域链是指,当访问一个变量时,首先会在当前作用域中查找,如果没有,则继续向上一级查找,这样的查找就形成了作用域链。
当代码在一个环境中执行时,就会形成一种叫做作用域链的东西,它的用途是保证执行环境中有访问权限的变量和函数进行有序访问。作用域链的前端,就是执行环境的变量对象。( 变量查询中,访问局部变量要比全局变量更快,因为不需要向上搜索作用域链。)

11、基本类型和引用类型

ECMAScript变量可能包含两种不同的数据类型:基本类型和引用类型。
基本类型值是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置,而引用类型值则是指那些保存在对内存中的对象,意思是变量中保存的实际上是一个指针,这个指针指向内存中的另一个位置,改位置保存对象。

堆内存和栈内存图示

  1. 基本类型赋值和引用类型赋值
var box = new Object(); //{}  创建引用类型
box.name = “Lee”  //新增一个属性
var box = ‘Lee’; //创建一个基本类型
  1. 执行环境和作用域

            注:全局变量、全局函数,最外围,属于window属性,都是window对象的属性和方法,可以直接利用window.属性或者方法执行。

12、原型的缺点

a) 原型模式创建爱你对象也有自己的缺点,它省略了构造函数传参初始化这一过程,带来的缺点就是初始化的值都是一致的。而原型最大的缺点就是它最大的有点,就是共享。
b) 原型中所有属性都是被很多实例共享的,共享对于函数非常合适,对于包含基本值的属性也还可以,但如果属性包含引用类型,就存在一定问题。

猜你喜欢

转载自blog.csdn.net/yw00yw/article/details/80937848