将对象属性键(而不是其值)作为Javascript中的参数传递

时间:2016-03-17 04:06:14

标签: javascript node.js

我正在尝试编写一个简单的可移植函数,我可以在其中传入object.property并从结果中设置其值。简单的例子:

var myFunction = function (result){ 
  var data;
  //get some data
  return result = data;
};

myObject.someData;
myFunction(pass reference to key of myObject.someData here)

我想在这里传递对myObject.someData的键的引用。布朗尼指出也在这里宣布它而不是上面的行。

现在我的实际代码:

var configurations;
var oldServer;
//make a call to get details of old server here

//helper function to stream json into a variable
var streamToString = function(stream, result) {
  var data = '';
  var chunk;

  stream.on('readable', function() {
      while ((chunk=this.read()) != null) {
          data += chunk;
      }
  });
  stream.on('end', function() {
    data = JSON.parse(data);
    return result = data;
  });
}

//declare shadowsocks as a property, so it can be passed as a param
configurations.shadowsocks;

//
streamToString(sequest.get('root@'+ oldServer[0].networks.v4[0].ip_address, '/etc/shadowsocks-libev/config.json', {
  privateKey: sshKey,
  readyTimeout: 20000
 }, function (error, stdout) {
   if (error) {
     throw error;
   }
 }), configurations.shadowsocks
);

我知道我可以这样做"错误的方式"通过做:

 stream.on('end', function() {
        data = JSON.parse(data);
        return configurations.shadowsocks = data;
      });
    }

但它不便携。我想让这个便携式。

1 个答案:

答案 0 :(得分:1)

在JavaScript中无法满足您的要求。您可能做的最好的事情是传递要设置的对象和属性名称。例如:

function streamToString(stream, result, resultKey) {
  var data = '';
  var chunk;

  stream.on('readable', function() {
      while ((chunk=this.read()) != null) {
          data += chunk;
      }
  });
  stream.on('end', function() {
    data = JSON.parse(data);
    result[resultKey] = data;
  });
}

然后使用它:

streamToString(/*...*/, configurations, 'shadowsocks');

我还应该指出,除非您将此作为一次性任务执行并且在完成时不在乎,否则您应该使用通过该值调用的回调,然后设置回调中该值的属性。通过这种方式,您将知道该属性何时已设置并可以使用。