Javascript对象函数返回null

时间:2016-06-30 23:20:56

标签: javascript node.js oop require

我正在尝试在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');

也没用。

我已经尝试了很多不同的东西,但无论如何,当我尝试在同一个实例中运行配置函数时,该对象变为空...有谁知道为什么会发生这种情况?也许我错过了一些非常明显的东西。

2 个答案:

答案 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之外不会返回任何内容,因为你没有从该方法返回任何内容。

我希望这可以解释这个问题。