有什么方法可以避免经常使用this
关键字来访问当前对象的属性和方法吗?
我尝试了类似于Example 2
的东西,但它根本不起作用。
示例1:
<script>
var fruits = {
printApple(){ return "Apple"; },
printBanana(){ return "Banana"; },
printPear(){ return "Pear"; },
printAll(){ return "All Fruits: " + this.printApple() + ", " + this.printBanana() + ", " + this.printPear(); }
}
alert(fruits.printAll());
</script>
字符串
示例二:
- (此脚本不起作用,请不要使用它)*
<script>
var fruits = {
y(){ return this.fruits; },
printApple(){ return "Apple"; },
printBanana(){ return "Banana"; },
printPear(){ return "Pear"; },
printAll(){ return "All Fruits: " + y.printApple() + ", " + y.printBanana() + ", " + y.printPear(); }
}
alert(fruits.printAll());
</script>
型
3条答案
按热度按时间wnvonmuf1#
由于OP的一些评论已经描绘了OP的真实的困境/问题...
唯一可以解决这个问题的方法是从
this
上下文中本地访问方法,并将bound version重新分配给每个局部变量。我的上述评论已经指向这个方向……
@Edgaras ...在这种情况下,OP可以写……*
let { elm, Element_Create, Element_Declare /* ... */ } = this;
*this
的每个方法,然后重新绑定它,就像... *elm = elm.bind(this); Element_Create = Element_Create.bind(this); /* ... */
*使用OP提供的已经简化的代码示例,后者应该重写为…
个字符
1tuwyuhd2#
看起来最惯用和最简单的方法是使用函数构造函数(硬对象)。实际上,我更喜欢它而不是原型,它对mixin设计模式非常好。
关于你的问题-没有很好的对象字面量替代方案存在,但你可以使用匿名构造函数:
字符串
还测试了数千个对象对原型和性能的差异是可以忽略不计的大多数情况下。
另一个好处是,您不再关心正确的
this
绑定,并且可以安全地传递方法引用,因为this
绑定发生在构造函数中。的数据
kmpatx3s3#
像许多语言一样,
this
的使用是不可避免的。特别是当你需要访问同一个对象的属性或方法时。this
关键字是每个执行上下文获取的特殊变量,由JS引擎自动设置。您的示例2 -脚本不工作,因为
y
没有在全局上下文中定义。字符串