【发布时间】:2014-12-23 03:00:25
【问题描述】:
我试图编写一个对象的快速示例,以及该对象的一些原型,但我从代码中得到了一些意想不到的结果。我正在处理两个文件,index.js 和cards.js 基本思想是实例化一个名为“deck”的新对象,然后在该对象上调用一些方法。这是我的代码
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
[]
看起来我从洗牌中得到了正确的结果,但是当我回顾“cards”包含的内容时,我得到了意想不到的结果,即使我正在设置值。我很难理解为什么会这样。另外,以这种方式返回结果是不是很糟糕,或者我应该像在 getCards 方法中那样使用传统的“return”语句?
提前致谢。
【问题讨论】:
-
请在局部变量声明前使用
var,这样您就不会创建意外的隐式全局变量。当一个简单的for或while循环可以正常工作时,为什么要使用递归也不清楚。
标签: javascript node.js class object