Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向构造函数添加方法_Javascript_Javascript Objects - Fatal编程技术网

Javascript 向构造函数添加方法

Javascript 向构造函数添加方法,javascript,javascript-objects,Javascript,Javascript Objects,重构carlike函数的方式允许我们使用点访问的方法调用语法 var carlike=功能对象,位置{ obj.loc=loc; 返回obj; }; var move=功能车{ car.loc++; }; var amy=carlike{},1; var ben=carlike{},9; /* 这里我们要调用点访问移动 艾米·莫夫; 本·莫夫; */ 您可能希望将obj绑定到car参数,因此当您调用move时,它会自动设置。但是,我将使用类语法对整个代码进行如下重构: class Car {

重构carlike函数的方式允许我们使用点访问的方法调用语法

var carlike=功能对象,位置{ obj.loc=loc; 返回obj; }; var move=功能车{ car.loc++; }; var amy=carlike{},1; var ben=carlike{},9; /* 这里我们要调用点访问移动 艾米·莫夫; 本·莫夫; */ 您可能希望将obj绑定到car参数,因此当您调用move时,它会自动设置。但是,我将使用类语法对整个代码进行如下重构:

class Car {
 constructor(val=0){
    this.loc=val;
 }
 move(distance=1){
  this.loc+=distance;
 }
 set(pos){
  this.loc=pos;
 }
}

var ben=new Car(10);
console.log(ben.loc);
ben.move();
var carlike=功能对象,位置{ obj.loc=loc; obj.move=move;//CHANGE1 返回obj; }; var move=函数{ 这个.loc++; console.logthis.loc; }; var amy=carlike{},1; var ben=carlike{},9; 艾米·莫夫//变化2
本·莫夫//CHANGE3这里的问题是您试图在没有参数的情况下执行函数car,一个合适的解决方案应该是如下更改移动函数:

var move = function() {
  this.loc++;
};
现在,您通过函数访问对象,在第一种情况下是amy,在第二种情况下是ben。最终的解决方案应该是这样的

var carlike=功能对象,位置{ obj.loc=loc; obj.move=移动; 返回obj; }; var move=函数{ 这个.loc++; }; var amy=carlike{},1; var ben=carlike{},9; 艾米·莫夫;
本·莫夫 首先,如果您将函数carlike视为构造函数,那么在使用之前必须实例化,这样您的代码应该是面向对象的

回答你的问题:

   var move = function() {
      this.loc++;
      console.log(this.loc);
    };

    var amy = new carlike({}, 1);
console.log(amy.move());

无需在move函数中传递参数,因为您正在carlike构造函数中使用它,因为move函数将成为方法,并且carlike的所有上下文也可用于该方法。因此,您可以从carlike构造函数this.loc的上下文中使用loc。如果您想引用当前创建的对象,您必须在构建对象的函数中定义方法。类似以下代码:

var carlike=功能对象,位置{ obj.loc=loc; obj.move=函数{ obj.loc++; console.log obj.loc; } 返回obj; }; var amy=carlike{},1; var ben=carlike{},9; 艾米·莫夫//变化2 本·莫夫//change3请从move函数中删除参数car。这是过时的和误导性的
   var move = function() {
      this.loc++;
      console.log(this.loc);
    };

    var amy = new carlike({}, 1);
console.log(amy.move());