ここで何かを誤解していると思います。列挙不可にしたいプロパティを含むオブジェクトがあります。オブジェクトの関数自体から値を代入できるようにしたいのですが、そうすると、プロパティが列挙可能になります。
例:
function ObjectNode() {
}
Object.defineProperty(ObjectNode.prototype, "parent", {
value:null
// enumerable and configurable default to false
}
// Pass an ObjectNode instance and set this object node as its parent
ObjectNode.prototype.addChild = function(node) {
node.parent = this; // <-- node.parent is now enumerable
...more code...
};
実際には、node.parent に値を割り当てると、parent と呼ばれる新しい「独自の」プロパティが作成され、元のプロパティがオーバーライドされます。
これを行わずに、列挙不可能なプロパティに値を内部的に割り当てる方法はありますか? または、クロージャー内の変数を参照する getter/setter プロパティに頼る必要がありますか?
編集:
GGGがこれに答えたことは称賛に値します。彼のアドバイスが私の究極の答えにつながったからです。
私がやりたかったことは、基本的に「for(key in object)」ステートメントから単純なプロパティを隠すことでした。私はこれを次のように行うことができました:
function ObjectNode() {
Object.defineProperty(this, "parent", {
value:null,
writable:true
});
}
私が最初からこれに躊躇した理由の 1 つは、各インスタンスでプロパティを再作成したくないという誤った理解でした。しかし、まあ、それがインスタンスプロパティです!!!
GGG、脳の再調整を手伝ってくれてありがとう!