JavaScript面向对象核心知识与概念归纳整理

面向对象就是使用对象。面向对象开发就是使用对象开发。

面向过程就是用过程的方式进行开发。面向对象是对面向过程的封装。

1.2 三大特性

抽象性
所谓的抽象性就是:如果需要一个对象描述数据,需要抽取这个对象的核心数据

提出需要的核心属性和方法

不在特定的环境下无法明确对象的具体意义

封装性
对象是将数据与功能组合到一起,即封装

JS对象就是键值对的集合,键值如果是数据(基本数据、符合数据、空数据)就称为属性,如果键值是函数那么就称为方法

对象就是将属性与方法封装起来

方法是将过程封装起来

继承性
所谓继承性就是自己没有但是别人有,拿过来成为自己的,就是继承,继承是实现复用的一种手段

在Java等语言中继承满足一个class的规则,类是一个class,他规定了一个对象有什么属性和方法。

在这些语言中继承是class之间的继承,一个class继承另一个class,那么该class就有了另一个class的成员,那么由该class创建出来的对象就同时具有两个class的成员。

在JS中没有明确的继承语法(ES6提供了class extend语法),一般都是按照继承的理念实现对象的成员扩充实现继承,因此JS中实现继承的方法非常对多。

传统继承基于类,JS继承基于对象

一个简单的继承模式:混入(mix)

function mix ( o1, o2 ) { for ( var k in o2 ) { o1[ k ] = o2[ k ]; } }

1.3 关于面向对象的一些其他概念

类class:在JS中就是构造函数

在传统的面向对象语言中,使用一个叫类的东西定义模板,然后使用模板创建对象。

在构造方法中也具有类似的功能,因此也称其为类

实例(instance)与对象(object)

实例一般是指某一个构造函数创建出来的对象,我们称为XXXX 构造函数的实例

实例就是对象。对象是一个泛称

实例与对象是一个近义词

键值对与属性和方法

在JS中键值对的集合称为对象

如果值为数据(非函数),就称该键值对为属性

如果值为函数(方法),就称该键值对为方法method

父类与子类(基类和派生类)

传统的面向对象语言中使用类来实现继承那么就有父类、子类的概念

父类又称为基类,子类又称为派生类

在JS中没有类的概念,在JS中常常称为父对象,子对象,基对象,派生对象。

二、构造函数 2.1 构造函数是干什么用的

初始化数据的

在JS中给对象添加属性用的,初始化属性值用的

2.2 创建对象的过程

代码:var p = new Person();

首先运算符new创建了一个对象,类似于{},是一个没有任何(自定义)成员的对象。

使用new 创建对象,那么对象的类型就是创建他的构造函数名

使用{}无论如何都是Object类型,相当于new Object

然后调用构造函数,为其初始化成员

构造函数在调用的一开始,有一个赋值操作,即this = 刚刚创建出来的对象。

因此在构造函数中this表示刚刚创建出来的对象。

在构造函数中 利用 对象的动态特性 为其对象添加成员。

三、作用域 3.1 什么是作用域

域表示的就是范围,即作用域,就是一个名字在什么地方可以使用,什么时候不能使用。
简单的说,作用域是针对变量的,比如我们创建一个函数 a1,函数里面又包了一个子函数 a2。

// 全局作用域 functiona a1() { // a1作用域 function a2() { // a2作用域 } }

此时就存 在三个作用域:全局作用域,a1 作用域,a2 作用域;即全局作用域包含了 a1 的作用域,a2 的作用域包含了 a1 的作用域。

当 a2 在查找变量的时候会先从自身的作用域区查找,找不到再到上一级 a1 的作用域查找,如果还没找到就
到全局作用域区查找,这样就形成了一个作用域链。

3.2 JS中词法作用域的规则

函数允许访问函数外部的数据

整个代码结构中只有函数可以限定作用域

作用规则首先使用提升规则分析

如果当前作用域中有了名字了,就不考虑外面的名字

3.3 属性搜索原则

所谓的属性搜索原则,就是对象在访问属性或方法的时候,首先在当前对象中查找

如果当前对象中存储着属性或方法,停止查找,直接使用该属性或方法

如果当前对象没有该成员,那么再在其原型对象中查找

如果原型对象中含有该成员,那么停止查找,直接使用

如果原型中还没有,就到原型的原型中查找

如此往复,直到Object.protitype还没有,那么就返回undefined

如果是调用方法就报错,该xxx不是一个函数

四、闭包 4.1 说说你对闭包的理解

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ae0a310d791581ed9286b871cb4f5bd1.html