【问题标题】:How can I create an instance of another class from a different file如何从不同的文件创建另一个类的实例
【发布时间】:2017-07-19 18:03:38
【问题描述】:

对于这个非常简单的问题,我已经到处寻找可以理解的答案,但似乎找不到。作为一个主要是 java 程序员,这是一个非常令人沮丧的过程。

例如,假设我正在尝试编写一副纸牌。我这样做的方法是在 card.js 中有一个“卡片”类,看起来像这样:

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

}

然后是 deck.js 中的“Deck”类,看起来像这样:

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

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

这里的问题是我收到一条错误消息“意外标识符”。大概是因为js没有意识到我已经定义了Card类。我怎样才能使deck.js文件可以访问 Card 类?

我应该提到我正在尝试在没有浏览器的情况下执行此操作,所以我想我会使用 node.js(再次抱歉,我是这个环境的新手)。或者更好的说法是,这将是服务器端。

【问题讨论】:

  • 如果您使用的是 node.js,那么您可能想查看模块系统:nodejs.org/api/modules.html
  • FWIW, Deck.prototype.shuffle = function(){} 不应在构造函数中。
  • 'Unexpected Identifier' 是一个语法错误。您发布的代码不会引发该错误,因此您似乎省略了包含该错误的部分。需要明确的是:如果您没有将 Card 导入到定义 Deck 的任何位置,那么您仍然会收到错误,但这将是一个不同的错误。
  • @FelixKling 拍我不好,我打字很快,我会编辑它。谢谢!

标签: javascript node.js oop


【解决方案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
 }

【讨论】:

  • 你不应该使用那个箭头函数。 “this”没有引用实例。
【解决方案2】:

您需要使用导出和导入:

在卡片文件中,你会这样做:

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

module.exports = Card;

然后在 Deck 文件中,你会这样做:

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

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

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

【讨论】:

  • 它给了我一个错误,说“未捕获的 ReferenceError:模块未定义”。我必须先在某个地方定义它吗?
  • @TravisPavletich 您是否使用节点来运行它?类似$ node Deck.js
  • 是的,我是。我发现了我刚才提到的问题并修复了它。但它仍然给我一个错误。上面写着 this.topCard = new Card(2, 'clubs');语法错误:意外的标识符。
  • @TravisPavletich:该行不应产生此错误。除了您在此处发布的内容之外,您还有其他代码吗?否则,唯一的解释是该行包含无效的不可打印字符。
猜你喜欢
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
相关资源
最近更新 更多