以一种允许我们使用方法调用语法的方式重构carlike函数" dot access"。
var carlike = function(obj, loc) {
obj.loc = loc;
return obj;
};
var move = function(car) {
car.loc++;
};
var amy = carlike({}, 1);
var ben = carlike({}, 9);
/*
Here we want to call move with "dot access"
amy.move();
ben.move();
*/

这就是我做的事情
var carlike = function(obj, loc) {
obj.loc = loc;
obj.move = move;//CHANGE#1
return obj;
};
var move = function(car) {
car.loc++;
};
var amy = carlike({}, 1);
var ben = carlike({}, 9);
amy.move();//CHANGE#2
ben.move();//CHANGE#3

但是,如果工作不正常,可能会发生错误,而且工作效果很好!
提前感谢☺
答案 0 :(得分:2)
这里的问题是你试图在没有参数的情况下执行功能车,正确的解决方案应该是改变move
这样的功能:
var move = function() {
this.loc++;
};
现在,您正在访问该对象,在第一个案例amy
中,在第二个ben
中执行该函数。最终解决方案应该是这样的。
var carlike = function(obj, loc) {
obj.loc = loc;
obj.move = move;
return obj;
};
var move = function() {
this.loc++;
};
var amy = carlike({}, 1);
var ben = carlike({}, 9);
amy.move();
ben.move();
答案 1 :(得分:0)
obj.move = move.bind(window,obj);
您可能希望将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();
答案 2 :(得分:0)
var carlike = function(obj, loc) {
obj.loc = loc;
obj.move = move;//CHANGE#1
return obj;
};
var move = function() {
this.loc++;
console.log(this.loc);
};
var amy = carlike({}, 1);
var ben = carlike({}, 9);
amy.move();//CHANGE#2
ben.move();//CHANGE#3
答案 3 :(得分:0)
首先,如果您将函数carlike
视为构造函数,那么您必须在使用之前进行实例化,以便您的代码应该面向对象。
回答你的问题:
var move = function() {
this.loc++;
console.log(this.loc);
};
var amy = new carlike({}, 1);
console.log(amy.move());
无需在移动函数中传递params,因为您在carlike
构造函数中使用它,移动函数将成为方法,carlike
的所有上下文也可用。因此,您可以使用carlike
构造函数(this.loc
)
答案 4 :(得分:0)
如果要引用当前创建的对象,则必须在构造对象的函数内定义方法。喜欢以下代码:
var carlike = function(obj, loc) {
obj.loc = loc;
obj.move = function() {
obj.loc++;
console.log( obj.loc );
}
return obj;
};
var amy = carlike({}, 1);
var ben = carlike({}, 9);
amy.move();//CHANGE#2
ben.move();//CHANGE#3

amy.move(amy);
ben.move(ben);
但是编写那种代码并没有任何意义。