什么是JavaScript对象访问器

201 阅读4分钟

JavaScript对象访问器是用来访问和更新对象的,用于这个功能的两个关键词是getter和setter。JavaScript在2009年的ES5中引入了getter和setter。

在本教程中,我们将了解什么是getter和setter,以及如何在JavaScript中利用它们,同时还将了解为什么要使用JavaScript的get或set方法。除此之外,我们还将讨论 object.defineProperty()。最后,我们将介绍一下哪些浏览器支持set和get方法。所以,让我们开始吧。

获取关键字

顾名思义,get方法是用来检索一个值的,在技术领域,它可以被定义为一个对象属性与一个函数的绑定,当需要该属性时,该函数会被调用。在我们访问get方法之前,我们无法获得该值。然而,我们要事先定义对象的属性。

例子

const player={
   name: "Hazard",
   club: "Chelsea",
   shirtNo: 10,
   get clubName(){
       return this.club;
   }
};
alert(player.clubName);

在这个例子中,我们使用 clubName属性来获取俱乐部属性的值。

设置关键字

它与get关键字相反。它是用来设置一个值的。在技术领域,当我们想设置一个属性时,它可以被定义为一个对象属性与一个函数的绑定。

例如

const player={
   name: "",
   club: "Chelsea",
   shirtNo: 10,
   //setting a player name
   set setName(setName){
       this.name=setName;;
   }
};
//passing/setting the name i-e object property using a setter
player.setName="Mount";
//lets see the data through an alert
alert(player.name);

在这个例子中,我们首先创建了一个对象。在该对象中,我们使用set关键字创建了一个set方法,在该方法中我们设置了传递给它的播放器的名字。在对象之后,我们设置了播放器的名字,然后我们用一个警报来显示结果。

函数与获取器

现在你一定在想,它们不是一样的吗,答案是肯定的,也是否定的。让我们用例子来解释这个问题。

例子 函数

const player = {
   name : "Hazard",
   club : "Chelsea",
   shirtNo : 10,
   myFunc : function() {
       return this.name+" plays for "+this.club;
   }
};
alert(player.myFunc());

获取器的例子

const player = {
   name : "Hazard",
   club : "Chelsea",
   shirtNo : 10,
   get myFunc() {
       return this.name+" plays for "+this.club;
   }
};
alert(player.myFunc);

在函数的例子中,我们将 myFunc()作为一个函数获得,即player.myFunc()。然而,在getter的例子中,我们访问的是 属性i-e player.myFunc()。现在我们知道,getter的语法比函数的语法更简单易读。

JavaScript中的Object.defineProperty()

JavaScript的Object.defineProperty()用于添加getter和setter。它需要三个参数,Object.defineProperty()的语法是。

Object.defineProperty(objectName, propertyName, objectDescriptor)

第一个参数是对象的名称,第二个参数是属性的名称,第三个参数是对象的描述。

举例来说

//define an object
const player={
   name:"Eden"
}

//now we get a property of an object

Object.defineProperty(player, "getName",{
   get: function (){
       return this.name;
   }
});

//now we set the property of an object

Object.defineProperty(player, "setName",{
   set:function(val){
       this.name=val;
   }
});

console.log(player.name);

//let's give the player a full name
player.setName="Hazard";
console.log(player.name);

在这个例子中,首先,我们定义了一个对象。之后使用**Object.defineProperty()**我们设置了setter和getter。现在,当我们第一次使用console.log时,玩家的名字是 "Eden"。但是当我们使用setter设置名字的时候,玩家的名字就变成了我们所设置的Hazard。

诚然,当我们使用getter和setter时,JavaScript可以保证更好的数据质量。

比如说

//creating an object
const player = {
   name : "Hazard",
   club : "Chelsea",
   shirtNo : 10,
   get myFunc() {
       return this.name+" plays for "+this.club.toLowerCase();
   }
};
// using get display data
alert(player.myFunc);

在这个例子中,我们使用了对象player的名字和俱乐部属性。我们将其转换为大写和小写,并返回该值。这个解决方案看起来像这样。

为什么使用getters和setters?

  • 可以在幕后完成和执行任务。
  • 如前所述,使我们确保更好的数据质量
  • 还具有更简单的语法
  • 属性和方法的语法是相似的

哪些浏览器支持这个?

微软EdgeOperaSafariMozilla firefox谷歌浏览器
9.0及以上版本是的是的是的

总结

在这篇文章中,我们几乎学到了所有关于JavaScript评估器的知识,也就是JavaScript中的get和set方法。我们还稍微深入地解释了什么是Object.defineProperty()。除此之外,我们还讨论了在JavaScript中使用评估器的好处以及哪些浏览器支持评估器。通过使用评估器,开发者可以让他的代码在幕后执行操作,并保证数据的安全。由于它有更简单的语法,它也使我们的代码更干净。