function modifyFunction(f) {
return function () {
var returnValue = f.apply(this, arguments);
console.log(returnValue);
if (returnValue == undefined) {
return this;
} else {
return returnValue;
}
};
}
function modifyMethod(o, m) {
if (o.hasOwnProperty(m)) {
if (o[m] instanceof Function) {
o[m] = modifyFunction(m);
}
}
}
var o = {
num: 0,
add: function (x) {
return this.num += x;
},
sub: function (x) {
return this.num -= x;
}
};
modifyMethod(o, "add");
o.add(2).add(4);
console.log(o.num); // o.num = 6
modifyMethod(o, "sub");
o.sub(1).add(3).sub(5);
console.log(o.num); // o.num = 3
如何在" if(o [m] instanceof Function)"内的modifyMethod函数中创建它。当发送它o [m]时,它将等于modifyFunction函数返回的内容?我试图让它成为可链接的,但我很难解决这个问题。
答案 0 :(得分:0)
使o.add(2).add(4);
等于o.add(2); o.add(4);
我们可以观察到o.add(2)
返回的内容应为o
。所以你的modifyFunction
应该返回一个函数:
使用给定参数调用传入函数。
返回来电者。
因此,不应该返回returnValue
(即o.num,一个数字),而应该始终返回this
。
另一点是,在modifyMethod
中,在您检查o[m]
是否为函数后,您应该传递该函数,而不是m
这只是关键字。所以它应该是o[m] = modifyFunction(o[m]);
function modifyFunction(f) {
return function () {
var returnValue = f.apply(this, arguments);
// Return the object that call this function,
// so it becomes chainable.
return this;
};
}
function modifyMethod(o, m) {
if (o.hasOwnProperty(m)) {
if (o[m] instanceof Function) {
// Pass o[m], not m, m is a string.
o[m] = modifyFunction(o[m]);
}
}
}
var o = {
num: 0,
add: function (x) {
return this.num += x;
},
sub: function (x) {
return this.num -= x;
}
};
modifyMethod(o, "add");
o.add(2).add(4);
console.log(o.num); // o.num = 6
modifyMethod(o, "sub");
o.sub(1).add(3).sub(5);
console.log(o.num); // o.num = 3