2017-08-21 44 views
0

试图完成一个简单的node.js练习,我尝试了几个变化。我怀疑我错过了一些非常简单的事情。声明对象文字时出现意外标识符错误

我创建var Calc的原因是因为我想导出'calculator'函数。

错误:

/Users/alex/zdev/react-project/calc.js:4 
    var add = function(){ 
    ^^^ 

SyntaxError: Unexpected identifier 

文件calc.js:(文件已经缩短留简洁)

var readline = require('readline-sync'); 

var Calc = { 
     var add = function(){ 
       var num1 = readline.question("num1: "); 
       var num2 = readline.question("num2: "); 
       console.log(num1 + num2); 
     }; 
} 

module.export = Calc; 

调用文件:

var calc = require('./calc'); 

var Calc = new calc.Calc(); 

Calc.add(); 
Calc.sub(); 
Calc.divide(); 
+0

“Calc”应该是一个构造函数,从中你可以实例化许多对象实例,每个对象实例都有自己的实例数据(这不是你需要显示的东西)?还是应该'Calc'只是一个单独的对象和一些方法,你不需要单独实例化一个来使用它? – jfriend00

+0

我相信第二次使用,如果我想要的。我在下面发布了我自己的回答。这给了我想要的,不幸的是我无法描述它。 –

+0

有人可以为这个问题提出不同的标题吗?这看起来似乎很基本,但如果标签更好,它可能对其他人有用。 –

回答

2

你定义一个新的对象Calc使用函数add,但语法不正确。正确的语法是:

var Calc = { 
    add: function() { 
    var num1 = readline.question("num1: "); 
    var num2 = readline.question("num2: "); 
    console.log(num1 + num2); 
    } 
}; 
+0

OP似乎希望'Calc'成为构造函数,'add'成为实例化对象上的方法。这段代码使得'Calc'成为一个单例,并且在这个单例中增加一个方法,而不是OP如何显示他们想要使用代码。 – jfriend00

+1

@ jfriend00在OP代码中,“Calc”用作单例。所以我的答案是关于如何正确地声明一个对象。原型等超出了范围。 – alexmac

+0

我知道你的代码是什么。目前还不清楚OP的要求。他们使用'Calc'的代码将其显示为一个构造函数,这不是创建它的原因,但是他们的代码显示没有使用实例数据,所以如果单个实例数据更改了调用代码,它可能会工作得很好。谁知道?我要求OP在对他们的问题发表评论时予以澄清。 – jfriend00

0

如果你想构造函数(我从你的语法意思),你应该做这样的:

function Calc() { 
} 

Calc.prototype.add = function() { 
    var num1 = readline.question("num1: "); 
    var num2 = readline.question("num2: "); 
    console.log(num1 + num2); 
}; 

module.exports = Calc; 

,然后导入此类似:

var Calc = require('./calc'); 

var calc = new Calc(); 

calc.add(); 
calc.sub(); 
calc.divide(); 

但我更喜欢你使用ES6类语法和Calc的构造函数看起来像:

class Calc { 
    constructor() {} 

    add() { 
     var num1 = readline.question("num1: "); 
     var num2 = readline.question("num2: "); 
     console.log(num1 + num2); 
    } 
} 

module.exports = Calc; 
0

溶液如下:

呼叫文件:

var calc = require('./calc'); 
var Calc = calc.Calc; 
Calc.add(); 

计算值的文件:

var Calc = { 
     add: function(){ 
       var num1 = readline.question("num1: "); 
       var num2 = readline.question("num2: "); 
       console.log(num1 + num2); 
     }, 
     divide: function(){ 
       var num1 = readline.question("num1: "); 
       var num2 = readline.question("num2: "); 
       console.log(num1/num2); 
     }, 
     sub: function(){ 
       var num1 = readline.question("num1: "); 
       var num2 = readline.question("num2: "); 
       console.log(num1 - num2); 
     } 
} 

module.exports = {Calc:Calc} 

拉下面的行是其中原来的mi赌注是:

定义使用逗号单独而不是定义模块出口字典分号

}, 

不是我的对象属性与其他功能

Calc = calc.Calc; 

导入后我的课。 另外,我写了 'module.export' 而不是 'module.exports' 原本

module.exports = {Calc:Calc} 

我忘了把我的parseInt函数()为我的NUM1和NUM2值。

+0

为什么不接受@alexmac的答案。它已经向你显示了用属性声明对象字面值的正确语法。 – jfriend00

+0

当然,如果你认为这是正确的事情。不幸的是,在看到他的回答后,我仍然挂在如何正确地执行module.exports。 –

+1

好吧,问题在于你问了一个遗漏了很多细节的问题。你展示了一个无效语法的对象定义,然后展示了一种使用该对象的方式,这与你正在尝试做的事情不一致,并且你没有在这里解释实际的目标。所以,你的回答就填补了问题中的所有空白,这是错误的地方。你应该做的是编辑你的问题来描述你实际想要完成的事情(描述你想如何使用它的最终目标),然后我们可以更完全地回答这个问题。 – jfriend00

相关问题