1、什么是面向对象程序员
对象并非计算机领域凭空造出来的概念,它是顺着人类思惟模式产生的一种抽象,面向对象编程也被认为是:更接近人类思惟模式的一种编程范式。编程
对象有以下几个特征:编程语言
在JavaScript中,任何不一样的 JavaScript 对象实际上是互不相等的。关于对象的“状态和行为”,JavaScript 中的行为和状态都能用属性来抽象。函数
JavaScript还有其独有的特色:对象具备高度的动态性,这是由于 JS 赋予了使用者在运行时为对象添改状态和行为的能力。性能
JavaScript有两种属性:数据属性和访问器属性。this
数据属性:prototype
访问器属性:(建立对象时可使用get和set关键字来建立访问器属性)设计
2、JavaScript的原型系统对象
在不一样的编程语言中,设计者也利用各类不一样的语言特性来抽象描述对象。最为成功的流派是使用“类”的方式来描述对象,这诞生了诸如 C++、Java 等流行的编程语言。这个流派叫作基于类的编程语言。还有一种就是基于原型的编程语言,它们利用原型来描述对象,好比JavaScript。ip
从 ES6 开始,JavaScript 提供了 class 关键字来定义类,这样的方案仍然是基于原型运行时系统的模拟。
JavaScript 的原型:若是全部对象都有私有字段 [[prototype]],就是对象的原型;读一个属性,若是对象自己没有,则会继续访问对象的原型,直到原型为空或者找到为止。
从 ES6 以来,JavaScript 提供了一系列内置函数,以便更为直接地访问操纵原型。三个方法分别为:
在 ES3 和以前的版本中,“类”的定义是一个私有属性 [[class]],其访问方式是 Object.prototype.toString。
在 ES5 开始,[[class]] 私有属性被 Symbol.toStringTag 代替,Object.prototype.toString 的意义从命名上再也不跟 class 相关。
new 操做在建立对象的时候具体作了哪些事情:
new 这样的行为,试图让函数对象在语法上跟类变得类似,可是,它客观上提供了两种方式,一是在构造器中添加属性,二是在构造器的 prototype 属性上添加属性。
ES6 中引入了 class 关键字,而且在标准中删除了全部 [[class]] 相关的私有属性描述,类的概念正式从属性升级成语言的基础设施,今后,基于类的编程方式成为了 JavaScript 的官方编程范式。咱们经过 get/set 关键字来建立 getter,经过括号和大括号来建立方法,数据型成员最好写在构造器里面。