【发布时间】:2017-08-20 21:11:02
【问题描述】:
我正在为更改计算器练习编写一些 Javascript。要求之一是使用对象构造函数;但是,我在从对象的一个方法中访问对象中的属性时遇到了很多麻烦。
这是我的对象:
function Coin(intValue){
this.intCents = null; //The property
function setCents(intValue) { //Trying access the intCents property from within this method
/// <summary>Sets the intCents property for this object. If the given value is invalid, then the intCents property is given NaN.</summary>
/// <param name="intCents" type="Number">The new intCents value.</param>
if (isValid(intValue)) {
this.intCents = intValue; //---javascript bugs out here!---
} else {
console.error("Invalid value given to Coin Object.");
this.intCents = NaN;
}
}
setCents(intValue);
function getCents() {
/// <summary>Returns the value of intCents.</summary>
/// <returns type="Number">The intCents value.</returns>
return this.intCents;
}
}
这是我使用对象的方式:
var objCoin;
var calculateChange = function () {
if (objCoin != null) {
objCoin.setCents(Number.parseInt("67"));
} else {
objCoin = new Coin(Number.parseInt("67"));
}
}
我去掉了一些不必要的代码,但总体来说基本功能如下: 用户在文本框中输入一个数字,然后单击网页上的按钮。按钮通过onclick事件调用calculateChange方法。
在“67”所在的 calculateChange 方法中,通常会有一些代码来获取文本框的值。为了简化代码并提供一个具体示例来说明传入的值类型,我将其替换为“67”。
假设用户输入一个整数...
如果我的 objCoin 变量没有用 Coin 实例实例化,则创建一个新实例并通过 Coin 的构造函数传入用户的输入。如果我的 objCoin 被实例化,那么使用 setCents 方法来保存用户的输入。
这是一个屏幕截图,显示了正在发生的事情以及 javascript 错误的位置:
据我了解,问题似乎与“this”关键字有关,因为它在 if 语句中显然未定义。尽管如此,我认为我的代码没有任何问题。
根据我在课堂上的理解,this.intCents = null; 是为 Coin 对象创建属性的正确方法,this.intCents 将是从对象中引用该属性的正确方法,而不管具体在哪里它是对象。
我尝试阅读以下问题:
'this' is undefined in JavaScript class methods 似乎更多地谈论 new 关键字和访问已创建对象的属性。
How does the "this" keyword work? 有很多有趣的例子;但是,我仍然没有看到我的代码中的缺陷。
访问intCents 属性时哪里出错了?
在这种情况下this 是什么? (我相信是对象变量 objCoin)
使用的程序:
Visual Studio 2015 企业版
谷歌浏览器及其开发者工具
【问题讨论】:
-
使用箭头函数,将其保存到外部变量,使函数成为实例方法等
-
我可以问一下为什么我被否决了吗? ...
-
这不可能是你完整的
Coin()函数,否则objCoin.setCents(...)会抛出一个错误,因为它不会被定义。 -
关于
setCents(intCents),这实际上是我在尝试修复代码时犯的错字。错字已修正。 -
@Tyler 这不是我要说的。在您的代码中,您没有将
function setCents() {...}附加到this,因此在脚本退出构造函数后,它将与function getCents() {...}一起被垃圾收集。
标签: javascript this