es6对象

一、面向对象技术

对象:

ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值、对象或函数”。严格来说,这意味着对象是无特定顺序的值的数组。

类:

每个对象都由类定义,可以把类看做对象的配方

实例:

程序使用类创建对象时,生成的对象叫作类的实例(instance)

面向对象语言的要求

封装

继承

多态

聚集

对象的构成:

属性和方法

二、对象引用

对象的创建和销毁都在 JavaScript 执行过程中发生,理解这种范式的含义对理解整个语言至关重要。

声明和实例化:

对象的创建方式是用关键字 new 后面跟上实例化的类的名字

对象引用:

对象是引用类型

对象废除:

垃圾回收机制

早绑定和晚绑定

所谓绑定(binding),即把对象的接口与对象实例结合在一起的方法

ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚

三、对象类型

可以创建并使用的对象有三种:本地对象、内置对象和宿主对象

本地对象:

ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。简单来说,本地对象就是 ECMA-262 定义的类(引用类型)

内置对象:

 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)

宿主对象:

所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。

所有 BOM 和 DOM 对象都是宿主对象。

四、对象作用域

在传统的面向对象程序设计中,主要关注于公用和私有作用域。公用作用域中的对象属性可以从对象外部访问,即开发者创建对象的实例后,就可使用它的公用属性。而私有作用域中的属性只能在对象内部访问,即对于外部世界来说,这些属性并不存在。这意味着如果类定义了私有属性和方法,则它的子类也不能访问这些属性和方法。

ECMAScript 只有公用作用域

 建议性的解决方法:

由于缺少私有作用域,开发者确定了一个规约,说明哪些属性和方法应该被看做私有的。这种规约规定在属性前后加下划线:

静态作用域:

静态作用域定义的属性和方法任何时候都能从同一位置访问

 ECMAScript 没有静态作用域

关键字this

在 ECMAScript 中,要掌握的最重要的概念之一是关键字 this 的用法,它用在对象的方法中。关键字 this 总是指向调用该方法的对象.

 为什么使用 this 呢?因为在实例化对象时,总是不能确定开发者会使用什么样的变量名。使用 this,即可在任何多个地方重用同一个函数

四、定义类或对象

原始的方式

工厂方式

为函数传递参数 

在工厂函数外定义对象的方法

 构造函数方式:

原形方式

首先用空构造函数来设置类名。然后所有的属性和方法都被直接赋予 prototype 属性

 此外,使用这种方式,还能用 instanceof 运算符检查给定变量指向的对象的类型

混合的构造函数/原型方式

 联合使用构造函数和原型方式,就可像用其他程序设计语言一样创建对象。这种概念非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。结果是,所有函数都只创建一次,而每个对象都具有自己的对象属性实例。

动态原型方法

 混合工厂方式

建议使用:

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.drivers = new Array("Mike","John");
}

Car.prototype.showColor = function() {
  alert(this.color);
};

var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",3,25);

oCar1.drivers.push("Bill");

alert(oCar1.drivers);	//输出 "Mike,John,Bill"
alert(oCar2.drivers);	//输出 "Mike,John"

  

五、修改对象

prototype 属性不仅可以定义构造函数的属性和方法,还可以为本地对象添加属性和方法。

 创建新方法:

通过已有的方法创建新方法

重命名已有方法

为本地对象添加新方法

重新定义已有的方法

极晚绑定:即能够在对象实例化后再定义它的方法。不建议使用极晚绑定方法,因为很难对其跟踪和记录

 

 

 

 

 

posted @ 2018-07-19 22:55  tutu_python  阅读(100)  评论(0)    收藏  举报