美文网首页
getters 和 setter

getters 和 setter

作者: SingleDiego | 来源:发表于2019-05-24 11:25 被阅读0次

上一节我们设置了私有属性与方法,但它们现在无法在对象外部访问。假如我们想在外部获取 dafaultLocation 该怎么做呢?

我们用 Object.defineProperty 方法设置能访问的属性:

function Circle(radius) {
  this.radius = radius;

  let defaultLocation = {x: 0, y: 0};

  this.draw = function() {
    console.log('draw');
  };

  Object.defineProperty(this, 'defaultLocation', {
    get: function() {
      return defaultLocation;
    }
  })
};

我们可以像访问属性那样使用它:

const circle = new Circle(1);
circle.defaultLocation;
// {x: 0, y: 0}

同时 defaultLocation 现在是只读属性,并不能从外部修改。

如果需要从外部修改属性,那么需要一个 set 方法:

function Circle(radius) {
  this.radius = radius;

  let defaultLocation = {x: 0, y: 0};

  this.draw = function() {
    console.log('draw');
  };

  Object.defineProperty(this, 'defaultLocation', {
    get: function() {
      return defaultLocation;
    },
    set: function(value) {
      if (!value.x || !value.y)
        throw new Error('Invalid Location!')
      defaultLocation = value;
    }
  })
};

还是像使用属性那样操作,参数不合法将有报错:

const circle = new Circle(1);
circle.defaultLocation = {x: 2, y: 2};

circle.defaultLocation = 1;
// Uncaught Error: Invalid Location!

相关文章

网友评论

      本文标题:getters 和 setter

      本文链接:https://www.haomeiwen.com/subject/bupwzqtx.html