ما در این مقاله دو مورد از ویژگی های توابع جاوااسکریپت را با هم بررسی می کنیم . ویژگی واثت تابع و تابع currying که انعطاف پذیری بیشتری به توابع جاوااسکریپت می افزایند.
وراثت تابعی چیست؟
وراثت تابعی فرآیند به ارث بردن ویژگی ها با اعمال یک تابع تقویت کننده به یک نمونه شی است. این تابع یک محدوده بسته را ارائه می دهد که می توانید از آن برای خصوصی نگه داشتن برخی از داده ها استفاده کنید. تابع augmenting از پسوند شی پویا برای گسترش نمونه شی با ویژگی ها و روش های جدید استفاده می کند.
میکسین های عملکردی توابع کارخانه ای قابل ترکیب هستند که ویژگی ها و رفتارها را به اشیایی مانند ایستگاه های خط مونتاژ اضافه می کنند.
// Base object constructor function
function Animal(data) {
var that = {}; // Create an empty object
that.name = data.name; // Add it a "name" property
return that; // Return the object
};
// Create achild object, inheriting from the base Animal
function Cat(data) {
// Create the Animal object
var that = Animal(data);
// Extend base object
that.sayHello = function() {
return 'Hello, I\'m ' + that.name;
};
return that;
};
// Usage
var myCat = Cat({ name: 'Rufi' });
console.log(myCat.sayHello());
// Output: "Hello, I'm Rufi"
تابع currying چیست؟
تابع currying تابعی است که چندین آرگومان را می گیرد و آن را به دنباله ای از توابع با تنها یک آرگومان در یک زمان تبدیل می کند.
به این ترتیب، یک تابع n-ary تبدیل به یک تابع یکنواخت می شود و آخرین تابع نتیجه همه آرگومان ها را با هم در یک تابع برمی گرداند.
// Normal definition
function multiply(a, b, c) {
return a * b * c;
};
console.log(multiply(1, 2, 3));
// Output: 6
// Simple curry function definition
function multiply(a) {
return (b) => {
return (c) => {
return a * b * c;
};
};
};
console.log(multiply(1)(2)(3));
// Output: 6