如何在没有这么多“这个”的情况下编写方法?

时间:2014-02-22 04:09:48

标签: javascript

有没有办法避免在方法体中的每个成员之前使用this.

JavaScript在很多方面都很神奇,但有一点让人难以理解的是你必须在每个成员之前使用this.

TList.on_key = function(key) {
    if (key == 116) {
        this.sid++;
        if (this.sid > this.items.length - 1) this.sid = this.items.length - 1
        if (this.sid >= this.d + (this.h * this.columns)) this.d++
    }

如果没有所有this.

,将会更容易阅读
TList.on_key = function(key) {
    if (key == 116) {
        sid++;
        if (sid > items.length - 1) sid = items.length - 1
        if (sid >= d + (h * columns)) d++
    }

4 个答案:

答案 0 :(得分:3)

是的,你可以使用“有争议的”with statement,只要你没有处于禁止的“严格模式”。

TList.on_key = function(key) {
    with(this) {
        if (key == 116) {
            sid++;
            if (sid > items.length - 1) sid = items.length - 1
            if (sid >= d + (h * columns)) d++
        }
    }
}

在使用它之前一定要充分了解它,因为它的语义可以让人们措手不及。

答案 1 :(得分:1)

不幸的是没有。 Javascript没有像Java这样的范围控件。您需要指定是否要获取本地var或对象var“this”。但你可以说出来。

var Test = function(){
   var $ = this;
   $.test = function(){
      return 'lalalal';
   };
};

答案 2 :(得分:0)

“this”参数在面向对象编程中非常重要,其值由JavaScript中的调用模式决定,这就是为什么我们无法避免这种情况。 有关更多信息,您可以阅读Douglas Crockford的“JavaScript:The Good Parts”中的函数调用。

答案 3 :(得分:0)

不幸的是,这是不可能的。我建议不要使用with statement因为它有它的缺点。请使用The JavaScript Code Quality Tool

测试您的代码

JavaScript this关键字在任何函数范围或全局范围内使用,并且在每个范围内它接收不同的值。函数内部的这个值实际上取决于调用它的对象。阅读this keyword

的更多信息