Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何创建变量名_Javascript_Variables - Fatal编程技术网

JavaScript-如何创建变量名

JavaScript-如何创建变量名,javascript,variables,Javascript,Variables,可能重复: 我将变量从onClick事件传递到JavaScript函数。总共有四个变量:两个表示方向,两个表示速度变化。我希望函数评估选择的方向(水平和垂直方向为h_或v_),然后应用必要的速度(更快或更慢) 现在,我通过首先计算方向并根据选择的方向调用不同的changeSpeed函数,成功地实现了这一点 我想做的是合并这些功能。在该示例中,$(方向+速度)意味着变为h\u速度或v\u速度 JavaScript有能力做到这一点吗?(真诚地,米格尔) 以下是我的工作代码的两个版本: 版本1 版本

可能重复:

我将变量从onClick事件传递到JavaScript函数。总共有四个变量:两个表示方向,两个表示速度变化。我希望函数评估选择的方向(水平和垂直方向为
h_
v_
),然后应用必要的速度(更快或更慢)

现在,我通过首先计算方向并根据选择的方向调用不同的
changeSpeed
函数,成功地实现了这一点

我想做的是合并这些功能。在该示例中,
$(方向+速度)
意味着变为
h\u速度
v\u速度

JavaScript有能力做到这一点吗?(真诚地,米格尔)

以下是我的工作代码的两个版本:

版本1 版本2
变量由变量对象的属性组成。您可以通过名称访问的唯一变量对象是全局变量对象(
this
在全局上下文中或
窗口
在浏览器中)。因此,对于全局变量,您可以执行以下操作:

function hSpeed() {...}

function vSpeed(){...}

// Set direction
var direction = 'h';

// Call related function
window[direction + 'Speed']();
但是,在函数执行上下文中不能这样做(因为ECMA-262明确拒绝对函数执行和变量对象的访问),您需要使“变量”成为以相同方式访问的对象的属性(即使用方括号表示法):


将两个变量放在一个对象中,如:

var directions = {
  horizontal: 1,
  vertical: 1
}
然后,您可以从参数中提取方向并匹配对象的子对象:

function changeSpeed(speed, direction) {
  //operate on diections[direction]
}
就改变速度而言,您可以对对象中的函数做类似的事情,但在您的情况下,我建议使用另一种数据结构,因为逻辑不会改变,只有参数:

var speedFactor = {
  faster: 2,
  slower: .5
}
这样,您就可以使用以下各项完成所有工作:

function changeSpeed(speed, direction) {
  directions[direction] = directions[direction] * speedFactor[speed]
}
好的

棘手但:

//Global namespace
var speeds = {};
speeds['h_speed'] = 10;
speeds['v_speed'] = 10;


function changeSpeed(speed, direction){
  var dir = direction.substring(0,1);
  var sp = (speed === 'slower') ? 0.5 : 2;
  //Still accessible from inside your function
  speeds[dir + '_speed'] = speeds[dir + '_speed'] * sp;
}

将完成这项工作。

当然有更好的方法来实现您想要实现的目标,但是如果您想要实现同样的目标(请注意,您不应该使用全局变量,您可以使用函数作用域将其私有化,但这是另一个主题)

现在,您可以通过调用更改速度,例如:

changeSpeed("slower", "h");

然后通过speed.h或speed.v访问该速度

if(direction='vertical'){v_speed*=speed='sleer'?2:0.5;}否则{h_speed*=speed='sleer'?2:0.5;}
谢谢大家!所有这些答复都很好。虫族,到目前为止,你的是我唯一尝试过的代码,它可以工作。
var speedFactor = {
  faster: 2,
  slower: .5
}
function changeSpeed(speed, direction) {
  directions[direction] = directions[direction] * speedFactor[speed]
}
//Global namespace
var speeds = {};
speeds['h_speed'] = 10;
speeds['v_speed'] = 10;


function changeSpeed(speed, direction){
  var dir = direction.substring(0,1);
  var sp = (speed === 'slower') ? 0.5 : 2;
  //Still accessible from inside your function
  speeds[dir + '_speed'] = speeds[dir + '_speed'] * sp;
}
var speed = {
  h: 10,
  v: 10
};

function changeSpeed(speedChange, direction) {
  switch (speedChange) {
    case 'slower':
      speed[direction] *= 2;      
      break;
    case 'faster':
      speed[direction] /= 2;      
      break;
  }
}
changeSpeed("slower", "h");