
如你所知,getter和setter已经成为了JavaScript的一部分。它们广泛支撑所有的主流浏览器,甚至是IE8。
为了做到这一点,必须履行下面两个操作:
- 创建基于Person原型的getter和setter清单。
- 创建将测试这些清单的Proxy对象。
我不认为这个点子平日是缺点的,但我认为它不是异常合适JavaScript。可能看起来getter和setter可以简化代码和节俭时光,但其实它们会带来隐蔽缺点,并且这些缺点第一眼看并不明显。
getter和setter若何工作?
有时刻,我们欲望能许可拜访一个会返回动态计算值的属性,或者你可能想要反竽暌钩内部变量的状况,而不应用显式的办法调用。
为了解释它们是若何工作的,让我们来看一个有着两个属性的person对象,这两个属性为:firstName和lastName,以及一个计算值:fullName。
- var obj = {
- firstName: "Maks",
- lastName: "Nemisj"
- }
计算值fullName会返回firstName和lastName两者的串联。
- Object.defineProperty(person, 'fullName', {
- get: function () {
- return this.firstName + ' ' + this.lastName;
- }
- });
为了获得fullName的计算值,不须要像person.fullName()带恐怖的括号,只须要应用简单的var fullName = person.fullName。
这同样实用于setter,你可以经由过程应用函数设置值:
- Object.defineProperty(person, 'fullName', {
- set: function (value) {
- var names = value.split(' ');
- this.firstName = names[0];
- this.lastName = names[1];
- }
- });
类的到来
问题在哪里?
起首小小地总结一下这些是什么器械:
你也许在想:“嘿,我爱好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。
- person.getFulName();
- ^
- TypeError: undefined is not a function
这个缺点会在恰当的时刻恰当的处所被触发。拜访函数不存在的对象将触发缺点——这是好的。
如今,让我们来看看当用缺点的名称来应用setter的时刻会产生什么?
- person.fulName =
推荐阅读
必弗成少的误差来源竽暌冠误差项,任何模型都不克不及够彻底地解决。只有给定问题本身的┞锋实模型和无穷大年夜的数据来修改它,我们可以或许让误差和方差项都变成零。然而,在一个没有完>>>详细阅读
本文标题:为什么在JavaScript中使用getter和setter是一个坏主意
地址:http://www.17bianji.com/lsqh/36191.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示