3

Java ScriptでOOアプローチを使用することは可能ですか? node.js を使用して、サーバー側とクライアント側の両方で JavaScript を使用しています。現在、クエリ代わりに CRUD 操作にクエリを使用しています。DTO を使用してデータベースにデータを保存することは可能ですか?

4

1 に答える 1

0

はい、プロトタイプの継承を使用してエミュレートできます。言語はプロトタイプ駆動型であるため、ルールはまったく異なります。また、プロトタイプ チェーンなどについて調査する必要がありますが、最終的には非常に役立つことがわかります。

EventEmitter から継承する Node コアの内容を確認してください。util.inherits と呼ばれる組み込み関数があり、ECMA の新しいバージョンの実装があります。次のようになります。

/**
 * Inherit the prototype methods from one constructor into another.
 *
 * The Function.prototype.inherits from lang.js rewritten as a standalone
 * function (not on Function.prototype). NOTE: If this file is to be loaded
 * during bootstrapping this function needs to be rewritten using some native
 * functions as prototype setup using normal JavaScript does not work as
 * expected during bootstrapping (see mirror.js in r114903).
 *
 * @param {function} ctor Constructor function which needs to inherit the
 *     prototype.
 * @param {function} superCtor Constructor function to inherit prototype from.
 */
exports.inherits = function(ctor, superCtor) {
  ctor.super_ = superCtor;
  ctor.prototype = Object.create(superCtor.prototype, {
    constructor: {
      value: ctor,
      enumerable: false,
      writable: true,
      configurable: true
    }
  });
};

使用例は Stream クラスです。

https://github.com/joyent/node/blob/master/lib/stream.js#L22-29

var events = require('events');
var util = require('util');

function Stream() {
  events.EventEmitter.call(this);
}
util.inherits(Stream, events.EventEmitter);

coffeescript では、クラスは、この __extends 関数に要約されるわずかに異なるコード セットにコンパイルされます。これにより、ブラウザー間の互換性が高まると思いますが、Object.create をサポートしていない人を具体的に思い出すことはできません

var __hasProp = Object.prototype.hasOwnProperty, __extends = 
function(child, parent) { 
    for (var key in parent) { if (__hasProp.call(parent, key)) 
child[key] = parent[key]; } 
    function ctor() { this.constructor = child; } 
    ctor.prototype = parent.prototype; 
    child.prototype = new ctor; 
    child.__super__ = parent.prototype; 
    return child; 
  };
于 2012-10-08T15:44:11.053 に答える