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