Javascript 保留;这";在一个变量中,替换为“全部”;这";用这个变量? 上下文

Javascript 保留;这";在一个变量中,替换为“全部”;这";用这个变量? 上下文,javascript,jquery,coding-style,this,readability,Javascript,Jquery,Coding Style,This,Readability,当我使用jQuery时,我经常需要将这个保存在一个变量中: var obj = { myVar: null, myFunction1: function() { ... }, myFunction2: function() { this.myVar = "blabla"; this.myFunction1(); var ctx = this; $('xxx').click(function () {

当我使用jQuery时,我经常需要将
这个
保存在一个变量中:

var obj = {
    myVar: null,
    myFunction1: function() { ... },
    myFunction2: function() {
        this.myVar = "blabla";
        this.myFunction1();

        var ctx = this;
        $('xxx').click(function () {
            ctx.myFunction1();
        });
    }
}
var obj = {
    myVar: null,
    myFunction1: function() { ... },
    myFunction2: function() {
        var ctx = this;

        ctx.myVar = "blabla";
        ctx.myFunction1();

        $('xxx').click(function () {
            ctx.myFunction1();
        });

        //etc. I do it for all "this" even if I have 15 "this"...
    }
}
在这种情况下,我用变量替换所有
这个

var obj = {
    myVar: null,
    myFunction1: function() { ... },
    myFunction2: function() {
        this.myVar = "blabla";
        this.myFunction1();

        var ctx = this;
        $('xxx').click(function () {
            ctx.myFunction1();
        });
    }
}
var obj = {
    myVar: null,
    myFunction1: function() { ... },
    myFunction2: function() {
        var ctx = this;

        ctx.myVar = "blabla";
        ctx.myFunction1();

        $('xxx').click(function () {
            ctx.myFunction1();
        });

        //etc. I do it for all "this" even if I have 15 "this"...
    }
}
问题
  • 保存在变量中是否是一种良好的做法?还有别的办法吗
  • 用变量替换所有
    是否是一种良好的做法

在不同的功能中是不同的。在这种情况下,上下文是不同的

因此,明智的做法是将其保存在一个单独的变量中,这样您就可以确定您正在谈论的是什么上下文

在有子函数的函数中,我建议这样做,而在常规函数中则不建议这样做。那里没有必要

注意:您没有替换它,您只有一个指向正确上下文的指针

还有别的办法吗

是:可以使用匿名自执行函数传递对作用域的引用

myFunction2: function() {
    this.myVar = "blabla";
    this.myFunction1();

    (function(outerscope) {
        $('xxx').click(function () {
            outerscope.myFunction1();
        });
    }(this));
 }

总之,像您那样存储引用是很好的(至少,这不是一个坏做法),而且它是一种广泛使用的常见做法。

我总是使用创建:

var _self = this;
老实说,我不知道这是否是一个最佳实践,但因为我用js编写代码,我看到很多人都这么做,我觉得使用它很舒服

还有别的办法吗

您可以使用:

这显然会覆盖事件处理程序中的
this
,因此您无法通过
this
访问元素

您还可以将此传递为:



做你认为最容易阅读的事情。我个人只分配
var self=this并在嵌套函数内使用
self
,在其他任何地方使用

这通常是一种可接受的模式,但当函数内有函数(函数内;-)等时,可能会产生混淆

缓解这种情况的一种方法(通常是另一种方法)是将函数绑定到特定的上下文对象。处理此问题,但在web环境中使用可能还不安全

目前,您可以使用:


是的,你可以用你想要和喜欢的任何东西。
    $('xxx').click(jQuery.proxy(function () {
        this.myFunction1();
    }, this));