NodeJS defineClass - 嵌套类

时间:2012-08-31 07:59:40

标签: oop node.js

首先,我对OOP和NodeJS都很陌生。 到目前为止,我唯一的课程经验是PHP。

我正在尝试使用NPM中的defineClass模块创建一个名为Clients的javascript类。 然后我想为它添加子类,具有更多功能。 我想要子类中的一些功能的原因是因为它们中的一些可能具有很多功能。

这是我的代码:

var defineClass = require("defineClass").defineClass

var Client = defineClass({
  scpConnected: false,

  constructor: function (socketId) {
    this.id = socketId;
  },

  test: function (test){
    console.log('Test!!! '+ test); 
  }
});

var SSH = defineClass({
  _super: Client,
  connected: false,
  busy: false,
  buffer: '',

  constructor: function () {
    queue = [];
  },

  ssh: {
    connect: function (IP) {
      console.log('Connecting to '+ IP +'...');
    }
  }
});

var client = new Client('Test');
client.ssh.connect();

似乎“客户端”没有像我期望的那样获得SSH功能。

我在这里做错了什么? :)

新代码

var defineClass = require("defineClass").defineClass

var Client = defineClass({
  scpConnected: false,

  constructor: function (socketId) {
    this.id = socketId;
  },

  test: function (test){
    console.log('Test!!! '+ test); 
  },

  SSH: defineClass({  
      connected: false,
      busy: false,
      buffer: '',

      constructor: function () {
        queue = [];
      },

      connect: function (IP) {
        console.log('Connecting to '+ IP +'...');
      }
    })
});

var client = new Client('Test');
client.SSH.connect('test');

2 个答案:

答案 0 :(得分:1)

正如我在您的示例中所看到的,您实际上是在创建Client而不是SSH的实例:

 var client = new Client('Test');
 client.ssh.connect();

你应该写:

 var client = new SSH('Test');
 client.ssh.connect();

请注意,父类没有子代的功能,这违背了继承的想法。

答案 1 :(得分:0)

遗传明显存在一些问题。

在PHP中考虑以下示例(对应于您的代码):

<?php

class Client {
    public function __construct($socketId) {
        $this->id = $socketId;
    }
}

class SSH extends Client {
    public function __construct() {
        $this->queue = new Array();
    }

    public $ssh = "whatever";
}

$client = new Client('Test');
//What is the $client->ssh now?

?>