get和set以及监听机制

271 阅读3分钟

获取监听

获取监听(Get listener)是一种计算机编程中的事件处理机制,它用于监听(监测)某个对象上的获取事件。当该对象的属性被获取时,获取监听器会自动触发并执行预先定义的操作。通常,获取监听器被用于监测对象属性的变化,以便在属性被获取时自动执行一些操作。

在JavaScript中,可以使用Object.defineProperty()方法来定义一个对象的属性,并指定该属性的获取监听器。例如,下面的代码定义了一个对象person,它有一个名为name的属性,并且在该属性被获取时会触发一个获取监听器:

var person = {
  firstName: "John",
  lastName: "Doe"
};

Object.defineProperty(person, "name", {
  get: function() {
    return this.firstName + " " + this.lastName;
  }
});

console.log(person.name); // Output: "John Doe"

复制代码

在上面的代码中,我们使用Object.defineProperty()方法定义了person对象的name属性,并指定了一个获取监听器。当我们获取person.name属性时,获取监听器会自动触发并返回firstName和lastName属性的值的组合。

问?get: function() 这个我不太理解

get 是一个JavaScript中的关键字,用于定义一个对象的属性的获取器(getter)。当我们使用 get 关键字定义一个属性的获取器时,我们需要指定一个函数,这个函数会在该属性被获取时自动执行。这个函数的返回值就是该属性的值。

在上面的代码中,我们使用 Object.defineProperty() 方法来定义一个对象 person 的属性 name。在属性定义的选项对象中,我们指定了一个 get 方法,这个方法是一个匿名函数,它会在 person.name 属性被获取时自动执行。在这个匿名函数中,我们返回了 this.firstName + " " + this.lastName,也就是 person 对象的 firstName 和 lastName 属性的值的组合,这个组合就是 person 对象的 name 属性的值。

因此,当我们在代码中调用 console.log(person.name) 时,会触发 person 对象的 name 属性的获取器函数,这个函数会返回 person 对象的 firstName 和 lastName 属性的值的组合,也就是 John Doe。最终,这个值会被输出到控制台中。

get 和 set

getset 是 JavaScript 中用于定义对象属性的访问器(accessor)的关键字。通过使用这两个关键字,我们可以自定义对象属性的读取和写入行为,从而实现更加灵活和安全的对象属性访问方式。

get 用于定义一个对象属性的读取行为,也就是获取该属性的值时所执行的操作。当我们定义一个属性的 get 方法时,该方法会在访问该属性时自动调用,并返回该属性的值。例如:

const obj = {
  get name() {
    return "John";
  }
};
​
console.log(obj.name); // 输出 "John"
javascript复制代码

在上面的例子中,我们定义了一个对象 objname 属性的 get 方法。当我们访问 obj.name 属性时,该方法会被自动调用,并返回字符串 "John"。

set 用于定义一个对象属性的写入行为,也就是设置该属性的值时所执行的操作。当我们定义一个属性的 set 方法时,该方法会在设置该属性的值时自动调用,并接收新值作为参数。例如:

const obj = {
  _name: "",
  set name(value) {
    this._name = value.toUpperCase();
  }
};obj.name = "John";
console.log(obj._name); // 输出 "JOHN"
javascript复制代码

在上面的例子中,我们定义了一个对象 obj_name 属性和 name 属性的 set 方法。当我们设置 obj.name 属性的值时,该方法会被自动调用,并将新值转换为大写字母后赋值给 _name 属性。

总之,getset 可以让我们自定义对象属性的读取和写入行为,从而实现更加灵活和安全的对象属性访问方式。