本当にstatic
よろしいですか?
つまり、よりクラスに依存する言語では、次のようになる可能性があります。
class Person {
static people = 0;
public name;
public age;
public Person (name, age) { this.name = name; this.age = age; Person::people += 1; }
public sayName () { echo this.name; }
static numPeople () { echo Person::people; }
}
次に、次のように言うかもしれません。
bob = new Person("Bob", 32);
bob.sayName(); // "Bob"
Person::numPeople(); // 1
機能が必要な場合はPerson::numPeople();
、追加を止めるものは何もありませんObject.create.numPeople = function () {};
あなたが自問したいかもしれない質問は、「なぜ?」です。
次のような静的メソッドを呼び出そうとしていますか?
bob.constructor.numPeople();
もしそうなら、それを回避するより良い方法があると確信しています。たとえば、コンストラクターのプロトタイプを拡張すると、デフォルトで静的プロパティ/メソッドへのアクセスが提供されます。
var personObj = {
sayName : function () { console.log(this.name); },
sayAge : function () { console.log(this.age); }
};
var bob = Object.create(personObj, { name : "Bob", age : 32 });
これらは従来の継承に似た方法でアクセスされますが、各オブジェクトが同じ関数と値を参照するという意味で静的です。したがって、そのプロトタイプ オブジェクトが変更されると、構築された各インスタンスも変更されます。
個人的には、オブジェクト作成の大部分をインラインおよびオンデマンドで自由に行える方が好きです。複数の同じ形式を作成する必要がある場合は、通常、コンストラクターを作成したり Object.create を使用したりするのではなく、ファクトリを作成します。
単純なファクトリでも、1 つまたは 2 つのレベルのクロージャを使用して、プライベート プロパティ/メソッドをシミュレートできます。