我正在编写一个简单的JavaScript应用程序。代码包括创建一个对象deck
,它可以有许多嵌套的card
对象。
基本上,我希望能够访问甲板实例中的每张卡片,如下所示:
deck1.card2.method();
我使用以下函数创建了我的套牌原型:
function Deck(){
var cardStack = []
//deck properties & methods
}
function card(){
//card properties methods
}
我一直在使用JavaScript阵列的cardStack
和push
方法将每张卡添加到卡座并将其存储在pop
数组中。
然而,这不允许我按照我的意愿访问我的卡片:
deck1.card2.method();
有人能以正确的方式指出我吗?在JavaScript中可以吗?提前谢谢: - )
答案 0 :(得分:2)
您需要使用this
:
function Deck() {
this.cardStack = [];
this.card = function() {
console.log('Hullo');
}
}
现在调用该方法有效:
var deck = new Deck();
deck.card(); // Prints 'Hullo'
答案 1 :(得分:1)
要访问单卡对象,您需要将cardStack
设为公共财产。在构造函数中,this
keyword是对当前Deck
对象的引用,因此您可以使用:
function Deck(){
this.cards = [];
// deck properties & methods
}
然后,通过var deck = new Deck(…)
访问deck.cards[2]
的单张卡片,然后调用它的方法。
或者您对cardStack
数组使用访问器函数。扩展示例:
var Deck = (function() {
function Deck() {
var cardStack = [];
this.getCard = function(i) { return cardStack[i]; };
for (var i=0; i<5; i++)
cardStack.push(new Card(i));
}
function Card(i) {
this.method = function() {
alert("Hi, I'm card №"+i);
};
}
return Deck;
})();
var deck = new Deck();
deck.getCard(2).method(); // alerts "Hi, I'm card №2"
答案 2 :(得分:1)
您可以简单地通过在运行时将属性添加到对象中来实现动态实现这样的方法,方法是将卡或卡片推到阵列上。
例如:
var DeckStack = {
initialize: function() {
this.deckStack = [];
},
addDeck: function (name) {
this.deckStack.push(name);
this['deck' + this.deckStack.length] = name; // <-- We add a method or property to the object dynamically
}
};
DeckStack.initialize();
DeckStack.addDeck('test');
console.log(DeckStack.deck1); // Writes 'test' to console
// This will show our new method/property as part of the object
for (var meth in DeckStack) {
console.log(meth);
}
也许您正在创建一个Card对象。如果是这样,您将使用:
var card = new Card(name); // For example
this['deck' + this.deckStack.length] = card;
它可以作为你甲板上物品的财产。