【问题标题】:How to pass an object property as a parameter?如何将对象属性作为参数传递?
【发布时间】:2017-10-25 00:32:23
【问题描述】:

我一直在尝试找出这个问题。

我需要编写一个通过参数获取属性值的函数。这将最大限度地减少我必须编写的代码。这是一个属于游戏循环的函数(每秒调用一次)

该函数只取一个数字除以一个预先确定的数字,然后在数字后面加上相应的字母(1.000 将变为 1k)

游戏使用了很多数字,对于 10 个数字中的 9 个,我愿意这样做。

例子:

function Truncate (object, rss, idtr, idtr1, idtr2) {
var n1 = 1000;
var n2 = 1000000;
var n3 = 1000000000;
var n4 = 1000000000000;

if ( rss == "gas" ){ var a1 =    object.currentgas;
   if  (a1 < n1) {
          trunkholdergas = a1;
           document.getElementById(idtr).innerHTML = " "; }
  else if (a1 >= n1 && a1 < n2) {
        trunkholdergas = a1 / n1;   
            document.getElementById(idtr).innerHTML = "k"; }

我在循环中调用这一行:

Truncate (Player, 'gas', 'trunkgas');

由于我使用了一种解决方法,我创建了一个 if 语句系统,所以我的函数知道如何处理我给它的东西。这可行,但我必须准确指定我宁愿直接传递属性的所有内容。

我还发现,如果我给一个变量作为参数,它将不允许我初始化它的值。这意味着我还必须为每种情况指定保持变化值的变量。

这样不行:

Truncate (Player, 'gas', 'trunkgas', vari);


 if ( rss == "gas" ){ var a1 = object.currentgas;
       if  (a1 < n1) {
              vari = a1;
         document.getElementById(idtr).innerHTML = " "; }

我只是做错了还是这些 javascripts 限制?

我正在寻找一个纯 javascript 解决方案,因为这是我目前正在学习的。

编辑:问题已解决。对于在他/她的项目中需要类似功能的人,这里是代码:

function Truncate (object,  idtr, idtr1) {
var n1 = 1000;
   var n2 = 1000000;
   var n3 = 1000000000;
   var n4 = 1000000000000;

  var a1 = object;
   var trunkholder = 0;

  if  (a1 < n1) {
              trunkholder = a1;
         document.getElementById(idtr).innerHTML = " "; 
         document.getElementById(idtr1).innerHTML = trunkholder.toFixed(2); }
      else if (a1 >= n1 && a1 < n2) {
            var b = a1 / n1;
            trunkholder = b;   
         document.getElementById(idtr).innerHTML = "k"; 
         document.getElementById(idtr1).innerHTML = trunkholder.toFixed(2);}
     else if(a1 >= n2 && a1 < n3) {
            var c = a1 / n2;   
            trunkholder = c;
         document.getElementById(idtr).innerHTML = "m"; 
         document.getElementById(idtr1).innerHTML = trunkholder.toFixed(2);}
     else if (a1 >= n3 && a1 < n4){
            var d = a1 / n3;
            trunkholder = d;
            document.getElementById(idtr).innerHTML = "b"; 
            document.getElementById(idtr1).innerHTML = trunkholder.toFixed(2);}
        else if ( a1 >= n4 ) {
              var e = a1 / n4; 
              trunkholder = e;
           document.getElementById(idtr).innerHTML = "t"; 
           document.getElementById(idtr1).innerHTML = trunkholder.toFixed(2);} 
};

调用函数:

Truncate (Player.currentgas, 'trunkgas', 'currentgas');

它取指定属性的值和我用来显示数字和对应字母的元素的id名称。它只使用2个变量来存储原始数字和修改数字,直接传递给接口。这样您就可以无限次调用它。

希望这对某人有用!

【问题讨论】:

  • 听起来你需要模块化你的函数,以便它做一件事。如果函数“只接受一个数字”,那么它应该有一个参数。只需一项工作即可制作简单、可重用的功能,这些问题就会迎刃而解。
  • 为了做到这一点,我需要一个对象的属性作为参数......你所描述的正是我想要归档的。 “只是一个数字”被简化了。如果您仔细阅读,您会知道在检查其值以选择正确值后,它将被另一个数字除以。现在我确实没有模块化功能。因此我要问这些问题。
  • 换句话说,我怎样才能传递 object.itsproperty 而不是传递对象本身来操纵它在函数内的值。我需要该属性,因为它决定将更改哪个数字。 (其他参数仅指示要更改的元素。
  • 您可以通过传递属性将对象的属性传递给函数:someFunction(object.property),但如果该属性是一个简单的值(而不是另一个对象),则在函数中操作它不会操作原始对象。
  • 我刚刚再次尝试了您的示例,现在它可以正常工作了,我一定是之前做错了什么...大声笑。我只需要它的值的属性,因为对于脚本来说,值的来源并不重要。我基本上将它存储在一个 var 中,我用它来做数学运算。这样一来,“屏幕”后面的数字就不会受到影响,因此不会弄乱任何数学运算。该函数只取给定的值。它应该做什么并将该值更新为使用另一个函数显示在屏幕上的全局变量但是现在我应该能够让它像我预期的那样工作!谢谢先生。

标签: javascript parameters properties arguments javascript-objects


【解决方案1】:

我不确定我是否理解这个问题,但可以将 JavaScript 对象属性传递给函数。您可以使用Object.keys() 获取对象包含的属性列表,并将字符串值发送给函数。你可以在这里阅读更多内容https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

如果您的意思是传递该对象属性的值,那么它就像object["property"]object.property 一样简单

【讨论】:

  • 谢谢!马克刚刚为我澄清了这一点。我被引导到 object.property 不可能的假设。由于它之前在我的代码中不起作用(我的错误是我猜的),当我用谷歌搜索这件事时,我变得更加困惑。
猜你喜欢
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
相关资源
最近更新 更多