【发布时间】:2017-01-12 13:22:31
【问题描述】:
我创建了一副包含 52 个卡片对象的卡片组。每张卡片都继承了 cardObject() 函数中定义的属性和方法。但是,我对如何创建新牌组并访问其属性和方法感到困惑。
// Defining properties and methods for every single card object created by PackOfCards function
function cardObject(cardNum, cardSuit) {
this.cardNum = cardNum;
this.cardSuit = cardSuit;
}
cardObject.prototype.getCardValue = function() {
if (this.cardNum === "jack" || this.cardNum === "queen" || this.cardNum === "king") {
return 10;
} else if (this.cardNum === "ace") {
return 11;
} else {
return this.cardNum;
}
}
cardObject.prototype.getCardSuit = function() {
return this.cardSuit;
}
// Creating a deck of shuffled card where every card inherits properties and methods defined in cardObject function
function PackOfCards() {
var unshuffledDeck = [],
shuffledDeck = [];
var listCardNum = ["ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "jack", "queen", "king"];
var listCardSuits = ["clubs", "diamonds", "hearts", "spades"];
for (var i = 0; i < listCardNum.length; i++) {
for (var j = 0; j < listCardSuits.length; j++) {
unshuffledDeck.push(new cardObject(listCardNum[i], listCardSuits[j])); //generating 52 new card objects
}
}
var lengthCounter = unshuffledDeck.length;
while (lengthCounter > 0) { // shuffling the 52 unshuffled cards randomly
var tempPosition = Math.floor(Math.random() * lengthCounter);
shuffledDeck.push(unshuffledDeck.splice(tempPosition, 1));
lengthCounter--
}
return shuffledDeck;
}
var newDeckObj = new PackOfCards; // I've considered PackOfCards as constructer function here
var newDeckInstance = PackOfCards(); // I've created a variable that stores a new instance of PackOfCards() function that returns an array
console.log(newDeckObj[5].getCardValue);
console.log(newDeckObj[5].getCardValue);
在这里,我无法找到 newDeckObj 和 newDeckInstance 之间真正的核心区别。
两者都包含一个由 52 个对象组成的数组,但我在尝试访问其属性时未定义。我想这两个变量都是 PackOfCards() 函数的一些副本,但采用了不同的方法(一个认为它是一个构造函数,而另一个只是一个返回数组的函数),我无法完全理解。
【问题讨论】:
标签: javascript function oop