有没有办法避免不断使用
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>
示例2:
(此脚本不起作用,请勿使用)
<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>
像许多语言一样,
this
的使用是不可避免的。特别是当您需要访问同一对象的属性或方法时。
this
关键字是每个执行上下文都会获取的特殊变量,由 JS 引擎自动设置。
您的示例 2 - 该脚本不起作用,因为
y
未在全局上下文中定义。
var fruits = {
printApple(){ return "Apple"; },
printBanana(){ return "Banana"; },
printPear(){ return "Pear"; },
printAll(){
var self = this;
return "All Fruits: " + self.printApple() + ", " + self.printBanana() + ", " + self.printPear();
}
}
alert(fruits.printAll());
基本上,“不”。您确实需要引用某个对象,然后对其运行该方法。
“这是一个问题,对于示例 2,我如何避免不断使用 this 关键字,并替换为更简短的内容。或者干脆不使用。”
您可以使用可选参数,默认如下:
var fruits = {
printApple() {
return "Apple";
},
printBanana() {
return "Banana";
},
printPear() {
return "Pear";
},
printAll(o = this) {
return "All Fruits: " + o.printApple() + ", " + o.printBanana() + ", " + o.printPear();
}
}
alert(fruits.printAll());