【问题标题】:Number returning NaN?返回 NaN 的数字?
【发布时间】:2015-11-26 20:32:30
【问题描述】:

我正在处理具有许多属性的对象,并使用这些属性绘制到画布上。我正在使用其他属性计算一些属性。但是,我遇到了一个问题!

基本上,我有一个具有许多属性的对象,虽然当我检查存储在属性中的数据类型时,它返回“数字”,但当我调用该属性时,我得到的是 NaN……因此我不能在以下情况下使用它绘制到画布元素。

所以基本上,我有这个:

var MasterObject = {
    Object1: {
        width: Number(document.getElementById("width").value),
        height: Number(document.getElementById("height").value),
        border: 65,
        lines: Math.round((this.width - this.border* 2) / 60),
        lineSpace: (this.width - this.border* 2) / this.lines,
        lineSpace1: this.lineSpace
    }
};

在 console.log() 或 alert() 中使用“typeof”时,宽度、高度和边框属性返回“数字”。调用这些属性时,我会得到它们存储的数字!

虽然属性“lines”也返回“Number”,但当我实际尝试调用该属性时,它返回“NaN”。

宽度、高度和边框虽然是动态计算的,但始终是一个整数,我尝试用 Number [i.e. Number(Math.round((this.width - this.border* 2) / 60)) ].

我也读过尝试 parseInt() 等,但这也不起作用。

我确信这很简单,但我无法理解正在发生的事情。为什么数据的类型返回的是 Number 而实际的数据返回的是 NaN...我很困惑!!

感谢任何帮助。

【问题讨论】:

  • 您认为this 在您的代码上下文中是什么?
  • 对不起,以“this.border”为例,返回Object1.border。我已经通过在 Object1 中使用 alert(this.border) 的方法对此进行了测试。当我调用该方法时,它会提醒正确的属性。我不知道...也许我对此的理解就是我遇到这个问题的原因。
  • 例如,当在同一方法中使用 this.height 时,它会工作并绘制到画布上。只有当我调用 this.lines 时它才不起作用。
  • 提示:创建另一个属性为test: this.width。现在为test 执行console.log。它返回什么?

标签: javascript object nan


【解决方案1】:

this 的上下文不是您在其中引用它的对象。您可以做的一件事是将代码移动到函数中,使其成为您想要的上下文,然后调用函数而不是属性。

var MasterObject = {
    Object1: {
        width: Number(document.getElementById("width").value),
        height: Number(document.getElementById("height").value),
        border: 65,
        lines: function() {
          return Math.round((this.width - this.border* 2) / 60);
        },    
        lineSpace: function() {
          return (this.width - this.border* 2) / this.lines;
        },
        lineSpace1: function() { return this.lineSpace; }
    }
};

document.getElementById('print').innerHTML = MasterObject.Object1.lines();
<input id="width" value="10">
<input id="height" value="15">
<div id="print"></div>

【讨论】:

  • 这行得通。发布问题后,我意识到将它们放入绘制到画布的函数中会使它们起作用。我现在意识到我哪里出错了。感谢您的回答并感谢其他所有人的帮助。谢谢大家!
猜你喜欢
  • 2016-07-05
  • 2015-07-15
  • 2012-09-08
  • 2015-08-03
  • 2011-02-17
  • 1970-01-01
相关资源
最近更新 更多