在javascript中没有从对象传递给方法的数字

时间:2013-12-30 20:31:53

标签: javascript object methods numbers

我正在尝试创建一个包含2个方法的对象。第一个使用两个提示输入两个数字,第二个将数字加在一起。当我运行代码时,数字要么连接,要么返回NaN。我在数字上使用parseInt()但没有效果。

这段代码有什么问题?为什么数字没有通过?

var summator = {

  val1: 0,
  val2: 0,
  run: function() {
      this.val1 = prompt('enter a value');
      var newVal1 = parseInt(this.val1);

      this.val2 = prompt('enter another value');
      var newVal2 = parseInt(this.val2);
  },
  sum: function(newVal1, newVal2) {
        alert(newVal1 + newVal2);
  }
}

summator.run();
summator.sum();    

4 个答案:

答案 0 :(得分:1)

您没有将任何内容传递给sum

您的代码需要两个参数。

newVal1函数中的

newVal2runsum

中的同名变量无关

答案 1 :(得分:1)

修改代码如下 -

var summator = {

  val1: 0,
  val2: 0,
  run: function() {
      this.val1 = prompt('enter a value');
      newVal1 = parseInt(this.val1);

      this.val2 = prompt('enter another value');
      newVal2 = parseInt(this.val2);
  },
  sum: function() {
        alert(newVal1 + newVal2);
  }
}

summator.run();
summator.sum();

原因

var newVal1函数run()中的newVal1使run()位于sum()的范围内,因此位于newVal1 newVal2和{ {1}}不可用,因此您无法访问这两个值。

因此,我已将这两个变量设为全局范围,因此您不需要在sum()的参数列表中指定它们。

没有newVal1newVal2

的解决方案
var summator = {

  val1: 0,
  val2: 0,
  run: function() {
      this.val1 = prompt('enter a value');
      this.val1 = parseInt(this.val1);

      this.val2 = prompt('enter another value');
      this.val2 = parseInt(this.val2);
  },
  sum: function() {
        alert(this.val1 + this.val2);
  }
}

summator.run();
summator.sum();

答案 2 :(得分:0)

我会run返回从用户输入中获取的值,然后将其传递给sum方法:

var summator = {
  run: function() {
    var val1 = prompt('enter a value');    
    var val2 = prompt('enter another value');

    return {val1: parseInt(val1), val2: parseInt(val2)};
  },
  sum: function(newVal1, newVal2) {
    alert(newVal1 + newVal2);
  }
}

var vals = summator.run();
summator.sum(vals.val1, vals.val2);

我稍微修改了你的代码,因为这个val 1和val2不需要存储,因为它们在函数返回后没有被使用。

答案 3 :(得分:0)

修改您的代码如下:

var summator = {

   val1: 0,
   val2: 0,
   run: function() {
      this.val1 = prompt('enter a value');
      var newVal1 = parseInt(this.val1);

      this.val2 = prompt('enter another value');
      var newVal2 = parseInt(this.val2);
      summator.sum(newVal1, newVal2);
   },
   sum: function(newVal1, newVal2) {
       alert(newVal1 + newVal2);
   }
}


summator.run();

它会返回两者的加法,因为你已经解析了输入。

演示:http://jsfiddle.net/BKG7L/