我正在尝试在Javascript(Node.js)中进行一个非常简单的OOP,但是有问题。我已经尝试了一切,包括搜索,但没有找到答案。
基本上,我有这个文件Test.js:
class Test {
constructor(){
this.name = 'Hey';
this.config = 'null!';
console.log('this.config: ' + this.config);
}
config(msg){
this.config = msg;
console.log('new this.config: ' + this.config);
}
}
module.exports = Test;
(我也试过这个:)。
function Test()
{
this.name = 'Hey';
this.config = 'null!';
console.log('this.config: ' + this.config);
}
Test.config = function(msg) // and Test.prototype.config
{
this.config = msg;
console.log('new this.config: ' + this.config);
}
module.exports = Test;
我还有另一个app.js文件:
var TestModule = require('./Test.js');
var Test = new TestModule();
var test = Test.config('hi');
我试过的其他方式:
var TestModule = require('./Test.js');
var Test = new TestModule().config('hi');
也没用。
我已经尝试了很多不同的东西,但无论如何,当我尝试在同一个实例中运行配置函数时,该对象变为空...有谁知道为什么会发生这种情况?也许我错过了一些非常明显的东西。
答案 0 :(得分:0)
您要将var Test
指定为return
功能的config
值。
var test = Test.config('hi!');
由于config
不会返回任何内容,因此会导致test
为空。
您应该让config
方法返回一些内容(这可能是"method chaining" design pattern的一种形式),或者只是不将config
调用的结果分配给变量。< / p>
例如,你可以这样做:
var test = new TestModule();
test.config('hi!');
// the 'test' variable still contains a reference to your test module
答案 1 :(得分:0)
你的第一个片段是正确的
class Test {
constructor() {
this.name = 'Hey';
this.config = 'null!';
console.log('this.config: ' + this.config);
}
config(msg) {
this.config = msg;
console.log('new this.config: ' + this.config);
}
}
module.exports = Test;
config
是一个实例方法,而不是类方法或静态方法。
您需要在Test实例上调用config()
。像
var Test = require('./Test.js');
var testObj = new Test();
现在testObj
是实例,您可以在此对象上调用config()
方法。
test.config('Hi');
它会打印/记录一条消息但除了undefined
之外不会返回任何内容,因为你没有从该方法返回任何内容。
我希望这可以解释这个问题。