作家
登录

为什么在JavaScript中使用getter和setter是一个坏主意

作者: 来源: 2017-07-13 12:02:08 阅读 我要评论

为什么在JavaScript中应用getter和setter是一个坏主意

如你所知,getter和setter已经成为了JavaScript的一部分。它们广泛支撑所有的主流浏览器,甚至是IE8。

为了做到这一点,必须履行下面两个操作:

  • 创建基于Person原型的getter和setter清单。
  • 创建将测试这些清单的Proxy对象。

我不认为这个点子平日是缺点的,但我认为它不是异常合适JavaScript。可能看起来getter和setter可以简化代码和节俭时光,但其实它们会带来隐蔽缺点,并且这些缺点第一眼看并不明显。

getter和setter若何工作?

有时刻,我们欲望能许可拜访一个会返回动态计算值的属性,或者你可能想要反竽暌钩内部变量的状况,而不应用显式的办法调用。

为了解释它们是若何工作的,让我们来看一个有着两个属性的person对象,这两个属性为:firstName和lastName,以及一个计算值:fullName。

  1. var obj = { 
  2.  
  3.   firstName: "Maks"
  4.  
  5.   lastName: "Nemisj" 
  6.  
  7.  

计算值fullName会返回firstName和lastName两者的串联。

  1. Object.defineProperty(person, 'fullName', { 
  2.  
  3.   get: function () { 
  4.  
  5.     return this.firstName + ' ' + this.lastName; 
  6.  
  7.   } 
  8.  
  9. });  

为了获得fullName的计算值,不须要像person.fullName()带恐怖的括号,只须要应用简单的var fullName = person.fullName。

这同样实用于setter,你可以经由过程应用函数设置值:

  1. Object.defineProperty(person, 'fullName', { 
  2.  
  3.   setfunction (value) { 
  4.  
  5.     var names = value.split(' '); 
  6.  
  7.     this.firstName = names[0]; 
  8.  
  9.     this.lastName = names[1]; 
  10.  
  11.   } 
  12.  
  13. });  

类的到来

问题在哪里?

起首小小地总结一下这些是什么器械:

你也许在想:“嘿,我爱好getter和setter办法,它们感到更天然,就像JSON一样。”你说得对,它们切实其实是如许的,然则我们先退一步来看一看fullName在getter和setter之前是若何工作的。

为获得值,我们将应用类似于getFullName()的一些器械,以及为了设置值,我们将应用person.setFullName(‘Maks Nemisj’)。

如不雅拼错函数名,person.getFullName()写成person.getFulName()会产生什么呢?

JavaScript会给出一个缺点:

应用就和getter一样简单:person.fullName = ‘Boris Gorbachev’。这将调用膳绫擎定义的函数,并分别Boris Gorbachev成firstName和lastName。

  1. person.getFulName(); 
  2.  
  3.        ^ 
  4.  
  5. TypeError: undefined is not a function  

这个缺点会在恰当的时刻恰当的处所被触发。拜访函数不存在的对象将触发缺点——这是好的。

如今,让我们来看看当用缺点的名称来应用setter的时刻会产生什么?

  1. person.fulName = 
     1/4    1 2 3 4 下一页 尾页

      推荐阅读

      如何改进手上的机器学习模型

    必弗成少的误差来源竽暌冠误差项,任何模型都不克不及够彻底地解决。只有给定问题本身的┞锋实模型和无穷大年夜的数据来修改它,我们可以或许让误差和方差项都变成零。然而,在一个没有完>>>详细阅读


    本文标题:为什么在JavaScript中使用getter和setter是一个坏主意

    地址:http://www.17bianji.com/lsqh/36191.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)