私は node.js にかなり慣れていませんが、おそらく JavaScript も同様です。私は学ぶためにここにいます。
これが私がやろうとしていることです:
- 「John」オブジェクトは、関数を含む「Client」オブジェクトからすべてを継承する必要があります
- 新しいオブジェクトと継承をインスタンス化する際に、「new」キーワードの代わりに Object.create() を使用します
機能した単一ファイルのテストを次に示します。
var sys=require('sys');
var Client = {
ip: null,
stream : null,
state: "Connecting",
eyes: 2,
legs: 4,
name: null,
toString: function () {
return this.name + " with " +
this.eyes + " eyes and " +
this.legs + " legs, " + this.state + ".";
}
}
var john = Object.create(Client, {
name: {value: "John", writable: true},
state : {value: "Sleeping", writable: true}
});
sys.puts(john); // John with 2 eyes and 4 legs, Sleeping
これを複数のファイルに分割すると、次のようになります。
---- client.js ----
module.exports = function (instream, inip){
return {
ip: inip,
stream : instream,
state: "Connecting",
eyes: 2,
legs: 4,
name: null,
toString: function () {
return this.name + " with " +
this.eyes + " eyes and " +
this.legs + " legs, " + this.state + ".";
},
};
};
---- ジョン.js ----
var Client = require("./client");
module.exports = function (inname, instate){
return Object.create(Client, {
state : {value: inname, enumerable: false, writable: true},
name: {value: instate, enumerable: true, writable: true},
});
};
---- main.js ----
var sys = require("util");
var Client = require("./client")("stream","168.192.0.1");
sys.puts(Client); // null with 2 eyes and 4 legs, Connecting
var john = require("./john")("John","Sleeping");
sys.puts(john); //Function.prototype.toString no generic
sys.puts(sys.inspect(john)); // { name: 'Sleeping' }
sys.puts(sys.inspect(john, true)); // {name: 'Sleeping', [state]: 'John'}
質問:
- ファイルを分割したり、問題を引き起こしている require() を使用したりする際に、何が間違っているのでしょうか?
- john オブジェクトの名前が「Sleeping」で状態が「John」なのはなぜですか? 行を配置した順序であることはわかっていますが、コンストラクターに配置したパラメーターに従うべきではありませんか?
- これを行うより良い方法はありますか?「new」キーワードに頼るのではなく、Object.create() を学ぶ傾向があります。