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

サンプルでわかるように、実際にはSSHではなくClientのインスタンスを作成しています。

 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 に答える