有拼写缺点的履行不会给出任何缺点:
除了getter和setter办法,ECMAScript 2015(ES6)还自带proxy对象。proxy可以赞助你肯定宛转办法,这些宛转办法可以在实际拜访键履行之前,用来履行各类操作。事实上,它看起来像动态getter / setter办法。
- var person = new Person('Maks', 'Nemisj');
- console.log(person.fulName);
同样不严格,不冗长,弗成追踪的行动导致可能会掉足。
在我发明这一点后,我有一个问题:在应用getter和setter的时刻,有没有什么可以做的,以便于使得类更严格?我发明:有是肯定有,然则这值得吗?增长额外层次的复杂性到代码就只是为了应用数量更少的括号?对于API定义,也可以不应用getter和setter,而如许一来就能解决这个问题。除非你是一个铁杆开辟人员,并愿意持续进行,不然还有另一种解决筹划,如下所述。
proxy来赞助?
proxy对象可以用来捕获任何到类的实例的拜访,并且如不雅在类中没有找到预先定义的getter或setter就会抛掉足误。
让我们来实现它。
起首,为了找出什么样的getter和setter办法可以用在类Person上,可以应用getOwnPropertyNames和getOwnPropertyDescriptor:
- var names = Object.getOwnPropertyNames(Person.prototype);
- var getters = names.filter((name) => {
- var result = Object.getOwnPropertyDescriptor(Person.prototype, name);
- return !!result.get;
- });
- var setters = names.filter((name) => {
- var result = Object.getOwnPropertyDescriptor(Person.prototype, name);
- return !!result.set;
- });
在此之后,创建一个Proxy对象:
- var handler = {
- get(target, name) {
- if (getters.indexOf(name) != -1) {
- return target[name];
- }
- throw new Error('Getter "' + name + '" not found in "Person"');
- },
- set(target, name) {
- if (setters.indexOf(name) != -1) {
- return target[name];
- }
推荐阅读
必弗成少的误差来源竽暌冠误差项,任何模型都不克不及够彻底地解决。只有给定问题本身的┞锋实模型和无穷大年夜的数据来修改它,我们可以或许让误差和方差项都变成零。然而,在一个没有完>>>详细阅读
本文标题:为什么在JavaScript中使用getter和setter是一个坏主意
地址:http://www.17bianji.com/lsqh/36191.html
1/2 1

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