3

我正在尝试找出正确的语法来“预计算”要在下面的“withPrefix”函数中查找的属性值,以便我可以传递该函数并且它不依赖于 x 的当前值执行时间。

var a = { 
    one: 'First Name',
    two: 'Last Name'
};

var x = 'one';
var withPrefix = function(value) {
    return a[x] + ": " + value;
};

console.log(withPrefix);

当然,这是一个人为的例子,真实的例子更复杂,但试图将其简化为最简单的情况。console.log 输出说:

function (value) {
    return a[x] + ": " + value;
} 

但我希望它是这样的:

function (value) {
    return a['one'] + ": " + value;
} 

我使用 jQuery 和 RequireJS。如果这些库中的任何一个对此有任何帮助,那将是一个可以接受的解决方案,但我怀疑有一种纯粹的 javascript 方式可以做到这一点。

4

3 回答 3

1

您可以通过部分功能应用程序获得一些乐趣,并且bind

function masterFunc(x, value) {
    return a[x] + ": " + value;
}
var xValFunc = masterFunc.bind(null, 'one');
console.log(xValFunc('foo')); // First Name: foo
于 2013-04-02T22:46:24.043 回答
0

如果我理解正确。你想让一个本地范围尝试这样的事情:

var withPrefix = (function(){
  //create a new scope
        /* all viables created here cant be seen by the souronding code */
  var x = "one"
    , a = 
      { one: "First Name"
      , two: "Last Name"
      }
  return function(value){
    // the withPrefix function
    return a[x] + ": " + value //make the string using the Local object a
  }
}())
withPrefix("foo") // returns: "First Name: foo"
console.log(a) // returns undefined
console.log(x) // returns undefined
于 2013-04-02T23:15:46.613 回答
0

那么,你想要的是一个闭包吗?为此使用工厂函数(生成函数的函数):

function make_withPrefix (x) {
    return function (value) {
        return a[x] + ": " + value;
    }
}

所以现在你可以生成适当的 withPrefix 函数:

var withPrefix_one = make_withPrefix('one');
var withPrefix_two = make_withPrefix('two');

withPrefix_one('Han');   // returns "First Name : Han"
withPrefix_two('Solo');  // returns "Second Name : Solo"

只是普通的旧javascript。没有花哨的新功能,如 bind 或任何东西,也没有可怕的字符串引用地狱。从 Netscape Navigator 和 IE1 开始支持

于 2013-04-03T07:58:18.750 回答