2013-04-23 60 views
1

我正在寻找一种方法将属性从“this”注入到本地函数作用域中,所以我不需要编写“this”。当引用这个属性时。Javascript:将上下文属性传递到函数范围

具体细节显示在此代码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) } 

我知道它可以通过包装的功能代码实现“与(这){...}”,但什么是其他选择?

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

+0

通常情况下,我会说只是在'fields'定义之外添加'value',所以它的作用范围是匿名函数(基本上它变成了一个“私有”变量)。但是,它会要求您为变量编写访问器方法。但我不确定你想用你的框架实现什么,所以我只是把它作为一个建议来添加它。 – NilsH 2013-04-23 12:11:53

回答

0

你为什么要这么做?这是命名空间,因为它使得感知。 this对侦听器正在侦听的元素的引用。它包含更多的信息,而不仅仅是价值。

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

var value = this.value 
0

基本上有四个选项:

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