我想写一个对象的快速示例,以及该对象的一些原型,并且我得到了一些意外的结果。我正在处理两个文件,index.js和cards.js 其基本思想是实例化一个名为“deck”的新对象,然后调用该对象上的某些方法。这里是我的代码试图理解nodeJS和javascript对象
cards.js
//constructor
function cardsClass() {
this.cards = [
{ suit: 'heart', number: 1, name: 'ace' },
{ suit: 'heart', number: 10, name: 10 },
{ suit: 'heart', number: 11, name: 'jack' },
{ suit: 'heart', number: 12, name: 'queen' },
{ suit: 'heart', number: 13, name: 'king' }
];
}
//class method
cardsClass.prototype.getCards = function() {
return this.cards;
}
cardsClass.shuffle_helper = function (input_cards, return_deck, callback) {
if (input_cards.length !=0) {
index = Math.floor(Math.random() * input_cards.length);
if (input_cards[index]) {
return_deck.push(input_cards[index]);
input_cards.splice(index, 1);
}
cardsClass.shuffle_helper(input_cards, return_deck, callback);
}
else {
callback(null, 'success');
}
}
//class method
cardsClass.prototype.shuffle = function (callback) {
//set up a temp deck...
var return_deck = [];
cardsClass.shuffle_helper(this.cards, return_deck, function (err, results) {
this.cards = return_deck;
callback(null, this.cards);
});
}
module.exports = cardsClass;
index.js
var cards = require('./cards.js');
deck = new cards();
console.log(deck.getCards());
deck.shuffle(function (err, results){
console.log ('our results of a deck.shuffle');
console.log (results);
});
console.log ('and this is what our getCards function returns');
console.log(deck.getCards());
console.log ('looking at deck.cards');
console.log (deck.cards);
结果我从运行此代码获得低于
$ node index.js
[ { suit: 'heart', number: 1, name: 'ace' },
{ suit: 'heart', number: 10, name: 10 },
{ suit: 'heart', number: 11, name: 'jack' },
{ suit: 'heart', number: 12, name: 'queen' },
{ suit: 'heart', number: 13, name: 'king' } ]
our results of a deck.shuffle
[ { suit: 'heart', number: 1, name: 'ace' },
{ suit: 'heart', number: 11, name: 'jack' },
{ suit: 'heart', number: 13, name: 'king' },
{ suit: 'heart', number: 10, name: 10 },
{ suit: 'heart', number: 12, name: 'queen' } ]
and this is what our getCards function returns
[]
looking at deck.cards
[]
它看起来就像我得到p roper是我的卡片随机播放结果,但是当我回头看看“卡片”包含的内容时,即使设置了该值,我也会得到意想不到的结果。我在理解这是为什么时遇到了一些麻烦。另外,以这种方式返回结果的可怜形式,还是应该使用像getCards方法中那样的传统“返回”语句?
在此先感谢。
请使用中的局部变量声明这样你就不会创造偶然的,隐含的全局变量前面'var'。当一个简单的'for'或'while'循环可以正常工作时,你也不清楚为什么要使用递归。 – jfriend00 2014-10-27 20:18:35