2017-03-07 7 views
0

を編集しましたユーザーは辞書と呼ばれるオブジェクトを読むことができるlibを編集することもできます。ユーザーが読むことができ、私によって編集されるオブジェクトを持つ方法はありますか?JavaScriptオブジェクトは、</p> <p>目標は、私が作成しています...私はObject.definePropertyを使用してのみ編集することができ、通常の方法でそれを編集することはしないようにJavaScriptで閉じたオブジェクトを、作成したい部分的

+2

JSでは、実行時に何かを保護することはできません。すべてがサルのパッチを当てることができます。 – zerkms

+0

@zerkms私は答えを加えました。それをチェックして何が間違っているか教えてください! – challenger

答えて

0

あなたはこのようObject.defineProperty使用して、いくつかの基本的な保護を提供することができます。

var o = { a: 5 }; 

o._protected = {}; 
o._protected.a = o.a; 
Object.defineProperty(o, 'a', { 
    get: function() { return this._protected.a; }, 
    set: function(value) { 
    if (value > 0 && value < 5) { 
    this._protected.a = value; 
    } 
    configurable: false 
}); 

彼らが得る通過しますので、これは、このオブジェクトのプロパティaへの変更を制限します(読み取り)/設定(更新)します。もちろんこの場合、_protectedオブジェクトを操作することはできますが、ユーザーは意識的に 'ハックする'必要があります。プロパティaを直接変更しようとすると、あなたのコントロール下にあります。

この例では、o.a = 6を設定しようとすると、o.aは変更されません(もちろん、これが望ましい場合は、set関数の最大許容値に設定できます)。

o.aの変更を防ぐには、set関数を指定しないでください。

これは、プロパティが「有効な」値を取得するのに便利な場合があります。私はしばしばそのように使いました。

0

見つけました。

var protected = {} 

    Object.defineProperty(this, 
    'setter', { 
     value: function(name , value) { 
     protected[name] = value 
     }, 
     writable: false,            
    }) 

    Object.defineProperty(this, 
    'getter', { 
     value: function(name , value) { 
     return JSON.parse(JSON.stringify(protected)) 
     }, 
     writable: false, 
    }) 

    Object.freeze(this.setter) 
    Object.freeze(this.getter) 
+0

@zerkmsこの回答を確認してください! – challenger

+0

@ediこの回答を確認してください! – challenger

+0

これは、単純に 'getter'と 'setter'というプロパティに保護を設定しています。私はこれがあなたにどのように役立つのか分かりません。 – rasmeister

関連する問題

 関連する問題