আমি অনুরূপ দৃশ্যের জন্য একটি ছোট সহায়ক তৈরি করেছি কারণ আমার প্রায়শই বেশ কয়েকটি লাইব্রেরি থেকে ফাংশনগুলিকে ওভাররাইড করা প্রয়োজন। এই সহায়ক একটি "নেমস্পেস" (ফাংশন ধারক), ফাংশনটির নাম এবং ওভাররাইডিং ফাংশন গ্রহণ করে। এটি রেফারেন্স করা নেমস্পেসে মূল ফাংশনটি নতুনটির সাথে প্রতিস্থাপন করবে।
নতুন ফাংশনটি প্রথম তর্ক হিসাবে মূল ফাংশনটি এবং বাকী হিসাবে মূল ফাংশনগুলি যুক্তি হিসাবে গ্রহণ করে। এটি প্রসঙ্গটি প্রতিবার সংরক্ষণ করবে। এটি পাশাপাশি অকার্যকর এবং অ-শূন্য ফাংশন সমর্থন করে।
function overrideFunction(namespace, baseFuncName, func) {
var originalFn = namespace[baseFuncName];
namespace[baseFuncName] = function () {
return func.apply(this, [originalFn.bind(this)].concat(Array.prototype.slice.call(arguments, 0)));
};
}
বুটস্ট্র্যাপ সহ উদাহরণস্বরূপ ব্যবহার:
overrideFunction($.fn.popover.Constructor.prototype, 'leave', function(baseFn, obj) {
// ... do stuff before base call
baseFn(obj);
// ... do stuff after base call
});
যদিও আমি কোনও পারফরম্যান্স পরীক্ষা তৈরি করি নি। এটি সম্ভবত কিছু অযাচিত ওভারহেড যুক্ত করতে পারে যা পরিস্থিতিগুলির উপর নির্ভর করে কোনও বড় বিষয় হতে পারে বা নাও হতে পারে।