JavaScript和扩展第三方API

时间:2014-10-30 13:35:47

标签: javascript

我正在更新我对JavaScript的了解,并且我坚持了一个课程任务。 我有API返回字符串...

API.workerName = function (worker) {
   return worker.firstName + ' ' + worker.lastName;
};

任务是为返回的字符串添加前缀而不是更改API,而是扩展它。我还必须避免复制和粘贴代码,因为第三方代码可以更改。我应该重新使用它。 我做的是在加载API后更改此函数...

API.workerName = function (worker) {
   return '(' + worker.position + ') ' + worker.firstName + ' ' + worker.lastName;
};

......但我认为我做错了。

2 个答案:

答案 0 :(得分:1)

要扩展方法,您应保存旧定义并从扩展程序中调用它:

API.oldWorkerName = API.workerName;
API.workerName = function(worker) {
    return '(' + worker.position + ')' + API.oldWorkerName(worker);
};

或许这就是你的课程所需要的:

API.workerPositionAndName = function(worker) {
    return '(' + worker.position + ')' + API.workerName(worker);
};

答案 1 :(得分:0)

保存旧定义并使其对其他人不可用的另一种巧妙方法是使用IIFE创建一个闭包来做这样的事情:

API.workerName = (function() {
    var old = API.workerName;     // this old version is only available inside your new function
    return function(worker) {
        return '(' + worker.position + ')' + old(worker);
    }
})();

以下是一个例子:



API = {
    workerName: function (worker) {
        return worker.firstName + ' ' + worker.lastName;
    }
};

API.workerName = (function () {
    var old = API.workerName;
    return function (worker) {
        return '(' + worker.position + ')' + old(worker);
    };
})();

alert(API.workerName({firstName: "Joe", lastName: "Blogs", position: "Lackey" }));