私は、javascriptでPersonオブジェクトを作成するためにFactoryパターンを使用しようとしています。これを実行している間、私は、オブジェクトを作成している間、関数のプロパティを列挙できないように設定しようとしています。しかし、それは効力を発揮していないようです。なぜそれがまだ関数のプロパティを列挙しているのか教えてください。ファクトリパターン - Javascriptコード - 関数を列挙しないようにする
definePropertyの呼び出しで、関数名だけを渡すと、printPersonDetailsが定義されていないというエラーが表示されます。 obj.printPersonDetailsを渡して動作させる必要があります。あなたが
Object.defineProperty
を使用する方法だけではありません
function createPerson(name, age ,sex){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sex = sex;
obj.printPersonDetails = function(){
console.log("Name: "+ obj.name + " Age: "+ obj.age);
}
Object.defineProperty(obj,obj.printPersonDetails , {
writeable:false,
enumerable:false,
configurable: false
});
return obj;
}
var person1 = createPerson("salman", 29,"M");
var person2 = createPerson("rahman", 59,"M");
var person3 = createPerson("sarah", 19,"F");
//person1.printPersonDetails();
//console.log(person1)
for(prop in person1){
console.log(prop +"->" + person1[prop])}
出力
C:\dev\javascript>node constructorpattern.js
name->salman
age->29
sex->M
printPersonDetails->function(){
console.log("Name: "+ obj.name + " Age: "+ obj.age);
}
''グローバル変数を作成している(PERSON1で支える)のために、あなたはほとんど常に避けるべきです。 – gcampbell