返回

JS 口袋书 · 对象生命周期揭秘,原来一切皆对象是这么回事

前端

在JS中,“一切皆对象”是一个非常重要的概念,它意味着任何数据都可以用对象来表示。这使得JS成为一门非常灵活的语言,能够轻松处理各种数据类型。

JS对象的生命周期

JS对象的生命周期分为三个阶段:创建、使用和销毁。

  • 创建 :JS对象可以通过多种方式创建,最常见的是使用new运算符。new运算符可以创建一个新的对象,并将其分配给一个变量。例如:
const person = new Object();
  • 使用 :一旦对象被创建,就可以使用它来存储和检索数据。可以使用点运算符(.)来访问对象的属性,可以使用方括号([])来访问对象的元素。例如:
person.name = "John Doe";
person["age"] = 30;
  • 销毁 :当对象不再需要时,可以通过将其分配给null来销毁它。例如:
person = null;

JS对象的操作

JS对象可以通过多种方式进行操作,最常见的是使用属性和方法。

  • 属性 :属性是对象的键值对,用于存储数据。属性可以通过点运算符(.)来访问和修改。例如:
person.name = "John Doe";
console.log(person.name); // "John Doe"
  • 方法 :方法是对象的函数,用于对对象进行操作。方法可以通过点运算符(.)后跟括号来调用。例如:
person.greet();

JS对象的原型

每个JS对象都有一个原型,原型是一个特殊的对象,它包含了对象共有的一些属性和方法。原型可以通过Object.getPrototypeOf()方法来访问。例如:

const personPrototype = Object.getPrototypeOf(person);
console.log(personPrototype.constructor); // Object

JS对象的继承

JS对象可以通过继承来获得另一个对象的属性和方法。继承可以通过extends来实现。例如:

class Employee extends Person {
  constructor(name, age, jobTitle) {
    super(name, age);
    this.jobTitle = jobTitle;
  }

  work() {
    console.log("I'm working!");
  }
}

JS对象的枚举

JS对象可以通过Object.keys()方法来枚举其属性。例如:

const keys = Object.keys(person);
console.log(keys); // ["name", "age"]

JS对象的冻结

JS对象可以通过Object.freeze()方法来冻结,冻结后的对象无法再被修改。例如:

Object.freeze(person);
person.name = "Jane Doe";
console.log(person.name); // "John Doe"

JS对象的代理

JS对象可以通过Proxy类来创建代理,代理对象可以拦截对对象的访问和修改。例如:

const personProxy = new Proxy(person, {
  get: function(target, property) {
    console.log("Getting property:", property);
    return target[property];
  },
  set: function(target, property, value) {
    console.log("Setting property:", property, "to", value);
    target[property] = value;
  }
});

personProxy.name = "Jane Doe";
console.log(personProxy.name); // "Getting property: name"
// "Setting property: name to Jane Doe"
// "Jane Doe"