Oop NodeJS defineClass-嵌套类

Oop NodeJS defineClass-嵌套类,oop,node.js,Oop,Node.js,首先,我对OOP和NodeJS都是新手。 到目前为止,我对类的唯一体验是PHP 我正在尝试使用NPM中的defineClass模块创建一个名为Clients的javascript类。 然后,我想添加子类到它,甚至更多的功能。 我之所以希望在子类中包含一些功能,是因为其中一些可能具有相当多的功能 这是我的密码: var defineClass = require("defineClass").defineClass var Client = defineClass({ scpConnecte

首先,我对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');

继承显然存在一些问题

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


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

 var client = new Client('Test');
 client.ssh.connect();
你应该写:

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

请注意,父类没有其子类的功能,这与继承的思想背道而驰

我的代码不是PHP,而是在NodeJS中运行的javascript,它不以同样的方式支持类。:)Javascript根本不支持类。这并不意味着您使用的库使继承与PHP完全不同(根据您的说法,PHP比JS更清楚)。您阅读了我提供的代码了吗?这里不应该是“var client=new SSH('Test');”这就是您定义SSH函数的地方。SSH是Client的子元素,我试过了。让我恼火的是,如果不更改“var-client”行,就不能添加更多的子类/功能。也许我误解了defineClass的工作方式。我想像下面的PHP示例一样进行“扩展”。因此,当您修复代码时,它会起作用,而现在您很恼火:D?我很难接受Coffeescript中的语法。这让我很困惑。请删除咖啡脚本“advice”,您将得到+1;)@madflow好的,我理解你不喜欢这个建议的原因:)@Leaom我不知道
defineClass
是如何工作的,但是我怀疑
new SSH('Test')
是否能通过
'Test'
客户端的
初始化程序。谢谢你的更正。我想我误解了它的工作原理。如何向父类添加功能,如上面添加的新代码?我将有更多的功能(FTP、Telnet、SCP)和它们自己的命令集。
 var client = new SSH('Test');
 client.ssh.connect();