添加get并设置为构造函数的原型链

时间:2014-09-28 18:40:55

标签: javascript get set

这段代码应该做一个简单的任务,就是计算两点之间的距离。实际上我写了这段代码来学习get和set是如何工作的,因为我是这个概念的新手。但它不断给我一些错误那里有意想不到的逗号/分号。我无法找出实际问题是什么。

另外我有一个问题,如果我想为x和y变量设置新值,我怎么能实现这个?我的意思是我可以将set属性视为一个函数并发送值只是points.addition(5,6) ,7,8)?

   (function(){
   function Point(x1,x2,y1,y2){
      this.x1=x1;
      this.x2=x2;
      this.y1=y1;
      this.y2=y2;
   }
   Point.prototype={
      get addition(){
          return Math.sqrt((this.x2-this.x1)+(this.y2-this.y1));
      },
      set addition(x1,x2,y1,y2){
           this.x1=x1;
           this.x2=x2;
           this.y1=y1;
           this.y2=y2;
      }
   };
   var points=new Point(1,2,3,4);
   console.log(points.addition);
   })();

1 个答案:

答案 0 :(得分:1)

这不是声明setter和getter的好方法。请参阅the mozilla documentation

这是一个带有修复程序的实时示例:

(function(){
   function Point(x1,x2,y1,y2){
      this.x1=x1;
      this.x2=x2;
      this.y1=y1;
      this.y2=y2;
   }
   Object.defineProperty(Point.prototype, "addition", {
      get: function () {
          return Math.sqrt((this.x2-this.x1)+(this.y2-this.y1));
      },
      set: function (point) {
           this.x1 = point.x1;
           this.x2 = point.x2;
           this.y1 = point.y1;
           this.y2 = point.y2;
      }
   });
   var points = new Point(1,2,3,4);
   console.log(points.addition);
   document.getElementById("output").textContent = points.addition;
})();
<div id="output"/>