Javascript 如何编写没有这么多“的方法”;这是什么;?

Javascript 如何编写没有这么多“的方法”;这是什么;?,javascript,Javascript,有没有办法避免在方法体中的每个成员之前使用this. JavaScript在很多方面都很神奇,但有一点让人难以理解,那就是您必须在每个成员面前使用这个。: 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.

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

JavaScript在很多方面都很神奇,但有一点让人难以理解,那就是您必须在每个成员面前使用
这个。

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++
    }
如果没有这些
,阅读起来会容易得多。

TList.on_key = function(key) {
    if (key == 116) {
        sid++;
        if (sid > items.length - 1) sid = items.length - 1
        if (sid >= d + (h * columns)) d++
    }
是的,你可以通过使用“有争议的”,只要你不是在“严格模式”,在那里它是被禁止的

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++
        }
    }
}
但是,在使用它之前一定要充分了解它,因为它的语义可能会让人措手不及。

在面向对象编程中,“this”参数非常重要,它的值是由JavaScript中的调用模式决定的,这就是为什么我们不能避免这一点。
有关更多信息,请阅读Douglas Crockford的“JavaScript:The Good Parts”中的函数调用。

不幸的是,没有。Javascript没有像Java那样的作用域控件。您需要指定是否要获取本地变量或对象变量“this”。但你可以说出它的名字

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

不幸的是,这是不可能的。我建议不要在语句中使用
,因为它有缺点。请使用


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

这是可怕的优化,但这绝对值得在答案LISTIF你宁愿写更少的代码,你可能会考虑查看LIFEScript或咖啡脚本,这两种方法都有一个快捷方式用于<代码>。这是简单的<代码> @ /代码>所以<代码>这个。FoO 变成<代码> @ Foo。只要我们在写javascript,我们就必须接受这个……极好的问题。这是我见过的最成熟、最专业的问题之一。我会避免使用
$
-这可能会导致与jquery混淆这是一个简单的例子:)他可以使用任何变量作为“this”。