Est-il possible de rendre une propriété d'objet javascript en lecture seule? Je veux définir une propriété qui ne peut pas être modifiée ...propriété en lecture seule
Répondre
C'est possible, mais cher. Vous pouvez le faire en ayant une variable membre vraiment privé et fournir une fonction accesseur:
var NiftyThing = function() {
var trulyPrivateVariable;
trulyPrivateVariable = 5; // For instance
this.accessorFunction = function() {
return trulyPrivateVariable;
}
};
Cela fonctionne parce que la fonction accesseur est une fermeture sur le var. Le coût est que chaque instance a sa propre copie de la fonction d'accesseur.
EDIT: Utilisation:
var n = new NiftyThing();
alert(n.trulyPrivateVariable);
// Alerts "undefined"
alert(n.accessorFunction());
// Alerts "5"
Voir Private Member Variables in JavaScript pour plus.
Je suis d'accord avec la réponse, et tient à souligner que certains frameworks JavaScript comme bob.js soutien de tels mécanismes intégrés:
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.
Cependant, si vous avez des besoins particuliers en matière de propriété, tels que accesseur get spécifique besoins de mise en œuvre, puis mieux définir une fonction qui obtient la valeur que vous en avez besoin.
- Tengiz
Vous pouvez mettre en œuvre quelque chose comme ça, faisant usage de 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. « Lecture seule » propriété accesseur en C#
- 2. Puis-je créer une propriété de dépendance en lecture seule?
- 3. PropertyGrid en lecture seule
- 4. Delphi ClientDataSet en lecture seule
- 5. Comment faire des requêtes WMI en lecture seule, en lecture seule, en C#?
- 6. Lecture seule TextBox
- 7. CVS lecture seule extraction
- 8. Lecture seule spinner
- 9. SQL2000 Lecture seule Afficher
- 10. en lecture seule DataGridView et IEditableObject
- 11. Accès en lecture seule aux procédures stockées
- 12. Fichiers SVN et en lecture seule
- 13. Utilisateur en lecture seule pour svn
- 14. Optimisation Sqlite: scénario en lecture seule
- 15. Afficher avec une colonne en lecture seule
- 16. SQLite pour les applications en lecture seule?
- 17. Rendre l'élément DOM efficace en lecture seule
- 18. Expose la mémoire en lecture seule
- 19. Comment définir un DateTimePicker en lecture seule?
- 20. liaison à un getter en lecture seule dans AS3
- 21. Comment faire un contrôle Windows Forms en lecture seule?
- 22. Comment rendre une propriété d'interface facultative en lecture seule dans VB.NET?
- 23. Comment créer un objet maquette basé sur une interface et définir une propriété en lecture seule?
- 24. Pourquoi la propriété To de la classe MailMessage de .net est-elle en lecture seule?
- 25. Une liaison TwoWay ou OneWayToSource ne peut pas fonctionner sur la propriété en lecture seule
- 26. Impossible de définir une propriété sur l'objet 'Identity' car il est en lecture seule
- 27. Comment définir la valeur d'une propriété en lecture seule avec des getters et setters génériques?
- 28. Django Foreign Keys Lecture seule
- 29. Comment effacer l'indicateur en lecture seule d'un fichier en Perl?
- 30. Connexion à une base de données en lecture seule
bien, notez que accessorFunction peut être remplacé par un utilisateur déterminé. Bien que cela n'affecte pas la valeur de privatePrivateVariable, cela affecte tout ce qui appelle accessorFunction. – cobbal