美文网首页
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