我无法直接访问对象中的字段或使用getter函数

时间:2011-11-17 05:56:25

标签: javascript

在这个琐碎的问题上,我几个小时都在撞墙。 我只是想尝试执行以下代码所显示的内容,但它对我不起作用。它在JSFiddle中工作正常,但不适用于我的环境。如果你之前读过这篇文章,我会重新发布,因为我很绝望,每个人都抓住了错字,这不是真正的问题。哎呀。我 如果我定义了一个toString方法,那么由于某种原因。如果我定义了一个getMid()函数,那就不行了。如果我使用toString作为一个hacky getMid()函数,它的工作原理。我很困惑。 我的doctype或任何其他html / js标题可能会影响它吗?我只是使用<!DOCTYPE HTML>。 这在所有浏览器中都失败了,我在另一台计算机上尝试过。谢谢你帮我解开这个谜。

function Card (first , last , mid) {
    this.first = first ;
    this.last = last ;
    this.mid = mid ;

}

var testArray = [ new Card("A", "B", "C"), new Card("D", "E", "E") ];

alert(testArray[1].mid);

再次感谢,戴尔

编辑在testArray赋值后添加“可选”分号。

我期待任何事情,但未定义。我想我已经把它缩小了。正在构建testArray:

alert(availableCardsForSet[0].cost);
for (var int = 0; int < 10 && testArray.length < 10; int++) {
testArray.push(availableCardsForSet.splice(Math.floor(Math.random()*availableCardsForSet.length),1));
}
alert(testArray[0].cost);
alert(testArray[0].toString());

第一个警报给了我一个有效的结果。第二个警报给我未定义。奇怪的是,finalSet [0] .toString给了我一个有效的结果。所以我认为这可能是由于我如何在我的for循环中打破这个东西。当我通过JSLint运行它时出现以下错误/警告问题在“第15行字符14:无法设置属性'第一个'未定义”第15行是for循环的内容。我感谢所有的回复。希望这些新信息能够提供帮助。

2 个答案:

答案 0 :(得分:1)

splice函数返回一个包含已删除元素的数组。如果仅删除一个元素,则返回一个元素的数组。 (source)


这意味着此代码将包含对象数组添加到testArray,而不是仅添加对象

testArray.push(availableCardsForSet.splice(Math.floor(Math.random()*availableCardsForSet.length),1));

可以使用[0]

轻松修复
testArray.push(availableCardsForSet.splice(Math.floor(Math.random()*availableCardsForSet.length),1)[0]);

以下是一个示例:http://jsfiddle.net/grc4/8Auvm/

答案 1 :(得分:0)

我尝试使用下面的doctype,它适用于我,

浏览器测试:IE8,Firefox3

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

功能卡(第一,最后,中){
    this.first = first;
    this.last = last;
    this.mid = mid;     }
var testArray = [新卡(“A”,“B”,“C”),新卡(“D”,“E”,“F”)];
警报(testArray [1] .mid) ;