2017-05-25 17 views
0

私はアイルランドとして「country」という1つのプロパティを持つオブジェクトを持っています。コードレベルで更新しようとすると、開発者がプロ​​パティを更新しないようにしたい。それをする可能性はありますか?もしそうなら、私に教えてくださいJavascriptプロトタイプオブジェクト内のプロパティの値を変更できないようにします

var Car = function() { 
      this.init(); 
      return this; 
     } 
     Car.prototype = { 
      init : function() { 

      }, 
      country: "Ireland", 


     } 

     var c = new Car(); 
     c.country = 'England'; 

私は国をアイルランド以外の他の値に設定したくありません。 if条件で確認することでこれを行うことができます。条件の代わりに、私は他の方法がありますか?

+1

可能な複製(https://stackoverflow.com/questions/10843572/how-to-create-javascript -constants-as-properties-of-objects-using-const-keyword) –

答えて

2

1つの可能なアプローチは、Object.defineProperty()init()に非書き込み可能として、このプロパティを定義している:

Car.prototype = { 
    init: function() { 
    Object.defineProperty(this, 'country', { 
     value: this.country, 
     enumerable: true, // false if you don't want seeing `country` in `for..of` and other iterations 
     /* set by default, might want to specify this explicitly 
     configurable: false, 
     writable: false 
     */ 
    }); 
    }, 
    country: 'Ireland', 
}; 

このアプローチは、1つの非常に興味深い機能を持っている:あなたはプロトタイプを経由してプロパティを調整することができ、そしてそれは、すべてのオブジェクトに影響を与えますそれ以来、作成された:

var c1 = new Car(); 
c1.country = 'England'; 
console.log(c1.country); // Ireland 
c1.__proto__.country = 'England'; 
console.log(c1.country); // Ireland 
var c2 = new Car(); 
console.log(c2.country); // England 

あなたは、これはどちらか、起こるCar.prototypeの変更を防ぐ、またはのプライベート変数にcountryを有効にしたくない場合このような関数、:[?constキーワードを使用して、オブジェクトのプロパティとしてJavascriptの定数を作成する方法]の

Car.prototype = { 
    init: function() { 
    var country = 'Ireland'; 
    Object.defineProperty(this, 'country', { 
     value: country, 
    }); 
    } 
}; 
+0

パーフェクト。しかし、これは設定可能であることを意味します:false、 書き込み可能:false? –

+0

最初に、プロパティディスクリプタを変更できない(たとえば、書き込み可能に戻す)、または削除することはできません。次に、割り当てによって値を変更することはできません。詳細は、 'Object.defineProperty()'のドキュメントを確認してください。 – raina77ow

関連する問題