1 概念

面向对象(oo)语言通常有类的概念,同过类可创建任意多个具有相同属性和方法的对象
之前es中没有类的概念,es6之后才有类的概念
es中的对象指的是一组无序属性的集合,属性可以包含基本值、对象或函数
每个对象都是基于一个引用类型创建的,既可以是原生类型,也可以是自定义类型

ECMAScript 规范明确定义了这样的一个概念:对象是零到多个的属性的集合。

In ECMAScript, an object is a collection of zero or more properties.

比如

let obj1 = new Object(); obj1.name =”tom” let obj2 = new Object()

function Person(name){ this.name = naem } let person1 = new Person(“tom”) let person2 = new Person(“keven”)

2 属性类型

对象的属性在创建时都会携带一些特性值,这些特性值只能在内部访问,
可以这些特性值把属性分为两种:数据属性 和 访问器属性
可以通过设置这些特性值来创建或修改属性

2.1 设置数据属性

  1. const object1 = {};
  2. Object.defineProperty(object1, 'property1', {
  3. configurable: true,
  4. enumerable: true,
  5. value: 42,
  6. writable: false
  7. });
  8. object1.property1 = 77;
  9. // throws an error in strict mode
  10. console.log(object1.property1);
  11. // expected 42

2.2 设置访问器属性

访问器属性不包含数据值,而是包含一度getter和setter函数,
因为自身不包含数据值,设置一个属性值通常会导致别的属性发生变化
而且不能直接定义,只能通过Object.defineProperty()来定义

  1. var bValue = 38;
  2. var o = {}; // Creates a new object
  3. Object.defineProperty(o, 'b', {
  4. // Using shorthand method names (ES2015 feature).
  5. // This is equivalent to:
  6. // get: function() { return bValue; },
  7. // set: function(newValue) { bValue = newValue; },
  8. get() { return bValue; },
  9. set(newValue) { bValue = newValue; },
  10. enumerable: true,
  11. configurable: true
  12. });
  13. o.b; // 38

2.3 更多参考

极客时间: 1 in 1..constructor:这行代码的结果,既可能是true,也可能是false

3 创建对象

3.1 new 类

  1. let obj1 = new Object();
  2. obj1.name ="tom"

3.2 对象字面量