En JavaScript, les propriétés d'un objet sont divisées en deux types : les propriétés des données et les propriétés de la mémoire :
La différence entre les deux attributs
Nous utilisons Object.defineProperty() pour d'abord ressentir intuitivement la différence entre les deux.
La méthode de définition des propriétés des données à l'aide de Object.defineProperty() est la suivante
var obj = {}; Object.defineProperty(obj, "prop", { value: 1, writable: true, //可写性 enumerable: true, //可枚举性 configurable: true //设置该属性是否能被删除,以及enumerable属性是否可以被修改 })
La méthode de définition des propriétés de mémoire à l'aide de Object.defineProperty() est la suivante
var obj = {}; Object.defineProperty(obj, "prop", { get set enumerable: true, //可枚举性 configurable: true //设置该属性是否能被删除,以及enumerable属性是否可以被修改 })
À partir de l'exemple ci-dessus, nous observons que l'attribut memory n'a pas les deux attributs value et writable, mais est remplacé par les attributs set et get.
Propriétés de la mémoire
Après avoir examiné les différences intuitives entre les attributs de données et les attributs de mémoire, examinons en détail les attributs de mémoire, un attribut qui est facilement négligé (c'est moi TT).
La plus grande différence entre les attributs de mémoire et les attributs de données est l'ajout de getters/setters, grâce auxquels la valeur de l'attribut peut être exploitée et certaines fonctions pratiques peuvent être implémentées.
//example1 function serialnum() { var n =1; var prop = null; Object.defineProperty(this, "n", { get: function() { return n; }, set: function(value) { if(value > n) n = value; else throw '请输入一个大于n的值'; } }) } var obj = new serialnum(); obj.n = 2; //2 obj.n = 0; //Uncaught 请输入一个大于n的值
Dans l'exemple ci-dessus, la fonction set est utilisée pour contrôler la plage de valeurs de n.
L'éditeur vous présentera ici l'attribut de stockage des attributs de données js. J'espère qu'il vous sera utile !