2017-07-19 76 views
0

我已经遍寻全面搜索这个非常简单的问题的可理解的答案,而且似乎无法找到答案。作为主要的Java程序员,这是一个非常令人沮丧的过程。如何从另一个文件创建另一个类的实例

例如,假设我正在编程一副牌。我会做到这一点的方法是在card.js一“卡”类,这将是这个样子:

function Card(value, suit){ 
    this.value = value; 
    this.suit = suit; 

} 

,然后一个“甲板”类deck.js这将是这个样子:

function Deck(){ 
    this.cardArray = []; 
    this.topCard = new Card(2, 'clubs'); 
} 

Deck.prototype.shuffle = function(){ 
    //shuffle the deck 
} 

这里的问题是,我得到一个错误,说'意外的标识符'。大概是因为js没有意识到我已经定义了Card类。我怎样才能让deck.js文件可以访问Card类?

我应该提到,我正在试图在没有浏览器的情况下这样做,所以我想我会使用node.js(再次,抱歉,我对这个环境很陌生)。或者更好地说,这将是服务器端。

+1

如果使用Node.js的,那么你可能要考虑的模块系统:https://nodejs.org/api/modules.html – UnholySheep

+1

FWIW,'Deck.prototype.shuffle = function(){}'不应该在构造函数中。 –

+0

“意外标识符”是*语法错误*。您发布的代码不会抛出该错误,所以您似乎已经省略了包含该错误的部分。要清楚:如果你没有将'Card'导入到'Deck'定义的任何地方,那么你仍然会得到一个错误,但那将是一个不同的错误。 –

回答

1

您需要使用出口和进口:

在卡的文件,你会怎么做:

function Card(num, suit) { 
    this.num = num; 
    this.suit = suit 
} 

module.exports = Card; 

然后在甲板上的文件,你会怎么做:

var Card = require('./Card.js'); 

function Deck() { 
    this.cardArray = []; 
    this.topCard = new Card(2, 'clubs'); 
} 

Deck.prototype.shuffle = function() { 
    //shuffle the deck 
}; 
+0

它给我一个错误,说“未捕获的ReferenceError:模块未定义”。我必须首先在什么地方定义它? –

+0

@TravisPavletich你使用节点来运行它吗?类似于'$ node Deck.js' – KevBot

+0

是的。我发现我刚刚提到的问题并修复了它。但它仍然给我一个错误。它在线上说this.topCard =新卡(2,'俱乐部');语法错误:意外的标识符。 –

1

您可以使用模块系统

在您的card.js中:

const Card = function(value, suit){ 
this.value = value; 
this.suit = suit; 
} 
module.exports = Card; 

而在你deck.js

const Card = require('./card'); 

function Deck(){ 
this.cardArray = []; 
this.topCard = new Card(2, 'clubs'); 

} 

Deck.prototype.shuffle = function(){ 
    //shuffle the deck 
} 
+0

您不应该使用该箭头功能。 “this”没有引用该实例。 – lleon

+0

是的,我忘了,但我现在编辑 –