0

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

2 回答 2

1

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

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

你应该写:

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

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

于 2012-08-31T08:32:51.647 回答
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?

?>
于 2012-08-31T08:16:39.227 回答