javascript中的数据属性和存储器属性

在javascript中,对象的属性分为数据属性和存储器属性两种:

两种属性的区分

我们运用Object.defineProperty()先来直观的感受一下这两者的差别。

运用Object.defineProperty()对数据属性举行设置的要领以下

var obj = {};
Object.defineProperty(obj, "prop", {
  value: 1,
  writable: true, //可写性
  enumerable: true, //可罗列性
  configurable: true //设置该属性是不是能被删除,以及enumerable属性是不是能够被修正
})

运用Object.defineProperty()对存储器属性的设置要领以下

var obj = {};
Object.defineProperty(obj, "prop", {
  get
  set
  enumerable: true, //可罗列性
  configurable: true //设置该属性是不是能被删除,以及enumerable属性是不是能够被修正
})

从上面的例子中,我们观察到存储器属性并没有value和writable两个属性,取而代之的是set和get属性。

存储器属性

看完了数据属性和存储器属性直观上的差别,我们细致看一看存储器属性这个轻易会被无视(说的就是我TT)的属性。

存储器属性与数据属性最大的差别就是增加了getter/setter,经由过程它们能够对属性的值举行操纵,能够完成一些有用的功用。

//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的值

上面的例子中,运用set函数对n的取值局限举行掌握。

    原文作者:rosie15
    原文地址: https://segmentfault.com/a/1190000004703750
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞