javascriptオブジェクトのプロパティを読み取り専用にすることはできますか?私は変更することができないプロパティを設定したい...読み取り専用プロパティ
4
A
答えて
7
可能ですが高価です。あなたが本当にプライベートメンバ変数を持った後、アクセサ機能を提供することにより、それを行うことができます。
アクセサ関数はVARオーバークロージャがあるので、作品var NiftyThing = function() {
var trulyPrivateVariable;
trulyPrivateVariable = 5; // For instance
this.accessorFunction = function() {
return trulyPrivateVariable;
}
};
。コストは、各インスタンスにアクセサ関数の独自のコピーがあることです。
EDIT:用途:
var n = new NiftyThing();
alert(n.trulyPrivateVariable);
// Alerts "undefined"
alert(n.accessorFunction());
// Alerts "5"
は多くのためPrivate Member Variables in JavaScriptを参照してください。
0
は、私は答えに同意し、注意したいことbob.jsサポートなど、組み込みのメカニズムのようないくつかのJavaScriptフレームワーク:
var obj = { };
//declare read-only property.
bob.prop.namedProp(obj, 'name', 'Bob', true);
//declare read-write property.
bob.prop.namedProp(obj, 'age', 1);
//get values of properties.
console.log(bob.string.formatString('{0} is {1} years old.', obj.get_name(), obj.get_age()));
//set value of read-write property.
obj.set_age(2);
console.log(bob.string.formatString('Now {0} is {1} years old.', obj.get_name(), obj.get_age()));
//cannot set read-only property of obj. Next line would throw an error.
// obj.set_name('Rob');
//Output:
//========
// Bob is 1 years old.
// Now Bob is 2 years old.
しかし、あなたは、このような特定のgetアクセサとしての特性に関する特別なニーズを持っている場合必要なときに値を取得する関数を定義することをお勧めします。
- Tengiz
0
あなたはObject.defineProperty()を利用して、このような何かを実装することができます
function blockProperties(object, properties) {
"use strict";
// If not properties passed, then use the already defined ones:
if (typeof properties === "undefined") {
properties = object;
}
// Loop trough the properties
for (var property in properties) {
if (properties.hasOwnProperty(property)) {
// Make property read-only
Object.defineProperty(object, property, {
value: properties[property],
writable: false,
configurable: false,
enumerable: false
});
}
}
return object;
}
var someObject = {};
blockProperties(someObject, {
propertie1: "someValue",
propertie2: "someOtherValue"
});
someObject.propertie1 = "this doesn't change anything";
console.log(someObject.propertie1); // Output: "someValue"
// Because "window" is also an object, you can set an only-read global var:
blockProperties(window, {
onlyReadVariable: "onlyReadValue"
});
関連する問題
- 1. 読み取り専用自動対(読み取り専用)プロパティ
- 2. typescriptクラスの読み取り専用プロパティ
- 3. BLToolkit:パブリックの読み取り専用プロパティ
- 4. CurrentCulture.DateTimeFormat.LongTimePattern読み取り専用
- 5. 読み取り専用アソシエーション
- 6. 読み取り専用テキストボックス
- 7. QMLのプロパティ - 読み取り専用、割り当てを、
- 8. Mockで読み取り専用プロパティをモックする方法は?
- 9. アイテムを含むSharePointの移行読み取り専用のプロパティ
- 10. ReSharperでプロパティの読み取り専用フィールドを生成
- 11. JavaFxプロパティで読み取り専用を設定する
- 12. はどのように読み取り専用プロパティ作業が
- 13. VB.netの自動プロパティ - 読み取り専用?
- 14. vb.netクラス読み取り専用のプロパティは
- 15. 派生クラスでプロパティを読み取り専用にする
- 16. moqで仮想読み取り専用プロパティをモック
- 17. 読み取り専用プロパティのWCF DataContractシリアル化?
- 18. ファイルの読み取り専用プロパティを設定する
- 19. JSON.NET - IgnoreDataMemberの読み取り専用プロパティとサポート
- 20. 読み取り専用プロパティを設定できません
- 21. NHibernateは読み取り専用プロパティ - 流暢マッピング
- 22. 実装iOSのprocotol - 読み取り専用プロパティ
- 23. JavaScriptでの読み取り専用プロパティの定義
- 24. DataGridView読み取り専用セル
- 25. CVS読み取り専用チェックアウト
- 26. 読み取り専用DBアクセスのトランザクション?
- 27. WPF:読み取り専用TextBoxとバインディング
- 28. は、Delphi ClientDataSetの読み取り専用
- 29. 形式symfony2読み取り専用
- 30. ComboBoxの読み取り専用アイテム
accessorFunctionは、決定されたユーザーによって上書きされることに注意してください、けれども。 truelyPrivateVariableには影響しませんが、accessorFunctionを呼び出すものすべてに影響します。 – cobbal