重学前端--js是面向对象还是基于对象?

重学前端-面向对象

跟着winter老师一起,重新认识前端的知识框架

js面向对象或基于对象编程

以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质都是对象层。拜读了winter老师的音频和文档,颇有收获。

对象:

  1. 一个可以触摸或者可以看见的东西;
  2. 人的智力可以理解的东西;
  3. 可以指导思考或行动(进行想象或施加动作)的东西。

对象的特点:

  1. 对象具有唯一标识性:即使完全相同的两个对象,也并非同一个对象。
  2. 对象有状态:对象具有状态,同一对象可能处于不同状态之下。
  3. 对象具有行为:即对象的状态,可能因为它的行为产生变迁。

面向对象编程的语言代表性的有Java、c++,他们都是把一个对象写成一个类,有变量也有函数,事先定义好,通过get、set去设置或者获取对应的属性或者方法。而js的对象和这个稍微有个出入:当事先定义的对象未被声明的属性(变量或者方法)可以动态添加。也就是说,js的对象是动态的,而Java等的对象必须事先声明,否则或在运行时报错。所以js的面向对象比Java的面向对象更加的具有灵活性,但其实际都是面向对象进行编程
java其面向对象包含状态和行为
js的面向对象则统称为属性,而属性又分为数据属性和访问器属性

数据属性特征:
value:就是属性的值。
writable:决定属性能否被赋值。
enumerable:决定for in能否枚举该属性。
configurable:决定该属性能否被删除或者改变特征值

访问器属性特征:
getter:函数或undefined,在取属性值时被调用。
setter:函数或undefined,在设置属性值时被调用。
enumerable:决定for in能否枚举该属性。
configurable:决定该属性能否被删除或者改变特征值。

结语

要想理解JavaScript对象,必须清空我们脑子里“基于类的面向对象”相关的知识,回到人类对对象的朴素认知和面向对象的语言无关基础理论,我们就能够理解JavaScript面向对象设计的思路。

posted @ 2019-03-18 20:45  娜辉  阅读(1233)  评论(0编辑  收藏  举报