2016-11-08 3 views
5

このコードでは、プロトタイプが変更される可能性があります。プロトタイプへの変更を防止する方法は?

どのようにしてプロトタイプの変更を防止できますか?私は試作品への変更を防ぐことができますどのように

var a = {a:1} 
var b={b:1} 
var c = Object.create(a) 
Object.getPrototypeOf(c) //a 
c.__proto__ = b; 
Object.getPrototypeOf(c) //b 
var d = Object.create(null) 
Object.getPrototypeOf(d) //null 
d.__proto__ = b; 
Object.getPrototypeOf(d) //null 
+1

プロトタイプを助け、このfreeze reference

チェックこのスニペット

var a = {a:1} var b={b:1} var c = Object.create(a) Object.getPrototypeOf(c) //a Object.freeze(c); c.__proto__ = b;//throws error now console.log(Object.getPrototypeOf(c)) //a var d = Object.create(null) Object.getPrototypeOf(d) //null d.__proto__ = b; Object.getPrototypeOf(d) //null

希望を参照してください/あなたがフリーズすることができることを意味、他のすべてのような単なるオブジェクトでありますそれを封印する。 – Bergi

+1

'__proto__'は推奨されていません。必要があれば 'Object.setPrototypeOf'を使います。 – Bergi

答えて

5

私はあなたがプロトタイプオブジェクト自体に変異を起こすのではなく、既存のオブジェクトのプロトタイプを上書きすることについて話しているとは限りません。

var a = {a:1} 
 
var b = {b:1} 
 
var c = Object.create(a) 
 
Object.preventExtensions(c) 
 
console.log(Object.getPrototypeOf(c)) //a 
 
c.__proto__ = b; // Error

をしかし、それはまた、あなたがそれに任意の新しいプロパティを追加しないできることを意味します:

あなたはそれを防ぐためにObject.preventExtensions()を使用することができます。必要に応じてObject.freeze()またはObject.seal()を使用して、オブジェクトの変更をさらに制限することもできます。

他の方法はありません。

0

はい、私たちはObject.freezeを使用できます。

Object.freeze()メソッドはオブジェクトをフリーズします。つまり、新しいプロパティが追加されないようにします。既存のプロパティの削除を防ぎます。既存のプロパティ、またはその列挙可能性、構成可能性、または書き込み可能性が変更されることを防止します。本質的にオブジェクトは事実上不変にされます。このメソッドは、フリーズしているオブジェクトを返します。

これは

関連する問題