代码之家  ›  专栏  ›  技术社区  ›  casademora

有没有更好的方法在Javascript中引用外部作用域?

  •  0
  • casademora  · 技术社区  · 16 年前

    我最近看到并编写了许多类似这样的javascript方法:

    var myObj = {
      dialogOptions: {...},
      init: function() {
        var $this = this;
        var something = $("<div/>").load("...", null, function() {
          $(this).dialog($this.dialogOptions);
        });
      }
    }
    

    现在,由于闭包的性质,这是可行的,但是对特定范围级别的命名变量引用似乎很尴尬。我的问题是:

    var $this = this;

    3 回复  |  直到 16 年前
        1
  •  1
  •   annakata    16 年前

    简短回答:没有。

    长话短说:“问题”是问题的独特性质 this 在一种所有东西都是对象的语言中。你不能选择这意味着什么时候 这或意味着

    这就是javascript。你可以做很多事,但并不总是很漂亮。

        2
  •  1
  •   Jani Hartikainen    16 年前

    (function() { /* do something */ }).bind(whatever)
    

    根据您的喜好,这可能比在单独的变量中声明范围更简洁。上述上下文中的绑定基本上是这样的:

    Function.prototype.bind = function(scope) {
        var thisFunction = this;
        return function() {
            thisFunction.call(scope);
        };
    };
    
        3
  •  1
  •   Kenan Banks    16 年前

    在这种情况下,如果 myObj 是一个全局(或全局可访问)变量,我通常会执行以下操作:

    var myObj = {
      dialogOptions: {...},
      init: function() {
        var something = $("<div/>").load("...", null, function() {
          $(this).dialog(myObj.dialogOptions);
        });
      }
    }