【问题标题】:Javascript: passing context properties into function scopeJavascript:将上下文属性传递到函数范围
【发布时间】:2013-04-23 12:03:21
【问题描述】:

我正在寻找一种将“this”中的属性注入本地函数范围的方法,所以我不需要写“this”。引用此属性时。

具体细节显示在这段代码http://jsfiddle.net/wwVhu/3/,看这部分

    ...
    //it's how it works
    doStuff: function(param) { $('#output').html(this.value + param) }

    //it's how i want it work - without referencing to this
    //doStuff: function(param) { $('#output').html(value + param) }

我知道可以通过将函数代码包装在“with(this) { ... }”中来实现,但是还有什么其他选择?

在每个方法的开头写“with(this)”或使用 js aop 是我试图避免的。

【问题讨论】:

  • 通常情况下,我会说只需将您的 value 添加到 fields 定义之外,因此它的范围为匿名函数(基本上它成为一个“私有”变量)。但是,它会要求您为变量编写访问器方法。但我不确定你想用你的框架实现什么,所以我添加它只是作为一个建议。

标签: javascript scope


【解决方案1】:

您为什么要这样做?它是命名空间的,因为它有意义。 this 引用监听器正在监听的元素。它包含的信息不仅仅是价值。

如果你想要另一个变量中的值,你可以这样做:

var value = this.value

【讨论】:

    【解决方案2】:

    基本上有四种选择:

    1. 保持原样。上下文和局部范围是不同的对象,将它们结合起来是不好的做法,会导致冲突。
    2. 您将 value 属性作为第二个参数添加到 doStuff 函数。
    3. 您使用较短的标识符昵称 this。我经常发现自己使用$t
    4. 您使用with(this) $('#output').html(value + param);。如1) 中所述,这是一种不好的编码习惯。当this 中有param 属性时,您的代码就会损坏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 2017-04-15
      • 2016-01-17
      相关资源
      最近更新 更多