JavaScript数组push自定义实例后读取值为undefined问题排查
问题根源及修复方案
错误1:构造函数无返回值
TarotCard作为构造函数调用时,默认返回实例对象this,你代码中仅在函数内部创建了未绑定到实例也未手动返回的card数组,最终new TarotCard()返回的是空对象,自然无法通过数组下标读取属性。
错误2:变量未声明导致全局污染
代码中card、deck、i均未使用let/const声明,默认挂载到全局对象,会出现变量覆盖问题。
错误3:DeckSize类型错误
你定义的DeckSize是字符串"78",此处应使用数字类型。
修复后代码
// 改为数字类型 const DeckSize = 78; function TarotCard(cardNumber, isInverse){ // 手动返回构造好的数组,也可直接简写为return [cardNumber, isInverse] const card = [cardNumber, isInverse]; console.log("new card="+card[0]+" "+card[1]); return card; } function TarotDeck(){ const deck = []; // 循环变量用let声明 for(let i=0; i<DeckSize; i++){ deck.push(new TarotCard(i, false)); console.log("pushed new card as "+deck[i][0]+" and "+deck[i][1]); } console.log(deck.length); return shuffleDeck(deck, 3); }
如果你希望TarotCard返回实例对象而非数组,也可以改成以下写法,读取属性时用.cardNumber和.isInverse即可:
function TarotCard(cardNumber, isInverse){ this.cardNumber = cardNumber; this.isInverse = isInverse; console.log("new card="+this.cardNumber+" "+this.isInverse); }
内容的提问来源于stack exchange,提问作者headrift
相关产品推荐
相关产品推荐

