私はJSでオブジェクトを持つ最も最適な方法を探しています。 JSでは複数の方法で何かを行うことができますので、どちらが「ベストプラクティス」であるかを知りたいと思っています。JSオブジェクトを作成する最も最適化された方法
オブジェクトの概念的な使用は、このようになります:
var John = new Person('John');
var Foo = new Person('Foo');
console.log(John.getName()); //Return 'John'
console.log(Foo.getName()); //Return 'Foo'
console.log(John.name); //undefined
console.log(Foo.name); //undefined
私はここにいくつかの例があります
例1:ここ
var Person = function (name) {
this.getName = function() { return name; }
}
私は実際には特性を有していません。 "name"は変更できません。publicでgetNameメソッドをpublicにアクセスし、local name変数で呼び出すことができます。これは実際に私のニーズを満たしています。
例#2:これは、例1と同様の挙動を有する
function Person (name) {
this.getName = function() { return name; }
}
。機能とパフォーマンスの観点から、var method = function() {};
とfunction method() {};
の違いについてはわかりません。
例#3:
var Person = function (name) {
this.name = name;
Person.prototype.getName = function() { return this.name; }
}
ここで私は、公共によってリード/ライトを、私はまた、公共アクセスすることができ、プロトタイプgetNameメソッドを持つことができnameプロパティを持っています。
例#4:ここで
var Person = function (name) {
this.name = name;
if (!Person._prototyped) {
Person.prototype.getName = function() { return this.name; }
Person._prototyped = true;
}
}
私は私が必要な時にプロトタイプのメソッドは一度だけしか設定されていることを確認して違いを例#3に持っていたものを持っています。
最終的な質問は、あなたが私に従うように提案するものか、あるいはそれらのいずれかがベストプラクティスであるかどうかです。
public * name *プロパティはありませんが、* getName *はpublicであり、有効に置き換えることができます* name *は変更できます。上記は、public * name *プロパティには何のメリットもありません。クロージャーにはより多くのリソースを使用し、値にアクセスするには余分な関数呼び出しを使用します。しかし、ゲッターの使用には正当な理由があります。 – RobG