উত্তর:
const args = ['p0', 'p1', 'p2'];
call_me.apply(this, args);
এর জন্য MDN ডক্স দেখুন Function.prototype.apply()
।
যদি পরিবেশটি ECMAScript 6 সমর্থন করে, আপনি পরিবর্তে একটি স্প্রেড যুক্তি ব্যবহার করতে পারেন :
call_me(...args);
আপনি কেন পুরো অ্যারেটি পাস করে ফাংশনের অভ্যন্তরে প্রয়োজনীয় হিসাবে এটি প্রক্রিয়া করছেন না?
var x = [ 'p0', 'p1', 'p2' ];
call_me(x);
function call_me(params) {
for (i=0; i<params.length; i++) {
alert(params[i])
}
}
call_me
। এটি কেবল শেষে একটি সেমিকোলন অভাব আছে।
ES6 স্ট্যান্ডার্ডে একটি নতুন স্প্রেড অপারেটর রয়েছে ...
যা হুবহু এটি করে।
call_me(...x)
এটি IE বাদে সমস্ত বড় ব্রাউজার দ্বারা সমর্থিত।
স্প্রেড অপারেটর আরও অনেক দরকারী কাজ করতে পারে এবং লিঙ্কযুক্ত ডকুমেন্টেশনগুলি এটি দেখানোর ক্ষেত্রে সত্যই একটি ভাল কাজ করে।
@ ক্যাপ্টজনকোল্ড উত্তর হিসাবে দিয়েছিল
var x = [ 'p0', 'p1', 'p2' ];
call_me.apply(this, x);
এবং আপনাকে কল_ম ফাংশনের জন্য প্রতিটি পরামিতিগুলি সংজ্ঞায়িত করতে হবে না। আপনি শুধু ব্যবহার করতে পারেনarguments
function call_me () {
// arguments is a array consisting of params.
// arguments[0] == 'p0',
// arguments[1] == 'p1',
// arguments[2] == 'p2'
}
এটি নোট করুন
function FollowMouse() {
for(var i=0; i< arguments.length; i++) {
arguments[i].style.top = event.clientY+"px";
arguments[i].style.left = event.clientX+"px";
}
};
// ---------------------------
এইচটিএমএল পৃষ্ঠা
<body onmousemove="FollowMouse(d1,d2,d3)">
<p><div id="d1" style="position: absolute;">Follow1</div></p>
<div id="d2" style="position: absolute;"><p>Follow2</p></div>
<div id="d3" style="position: absolute;"><p>Follow3</p></div>
</body>
যে কোনও আরগ সহ ফাংশন কল করতে পারে
<body onmousemove="FollowMouse(d1,d2)">
অথবা
<body onmousemove="FollowMouse(d1)">
function foo([a,b,c], d){
console.log(a,b,c,d);
}
foo([1,2,3], 4)
function foo(a, b, c, d){
console.log(a, b, c, d);
}
foo(...[1, 2, 3], 4)
স্প্রেড অপারেটরটি ব্যবহার করার সময় আমাদের অবশ্যই এটি লক্ষ্য রাখতে হবে যে এটি অবশ্যই শেষ বা একমাত্র পরামিতিটি পাস হয়েছে। অন্যথায় এটি ব্যর্থ হবে।
function callMe(...arr){ //valid arguments
alert(arr);
}
function callMe(name, ...arr){ //valid arguments
alert(arr);
}
function callMe(...arr, name){ //invalid arguments
alert(arr);
}
আরম্ভের যুক্তি হিসাবে যদি আপনাকে কোনও অ্যারে পাস করতে হয় তবে আপনি এটি করতে পারেন:
function callMe(arr, name){
let newArr = [...arr];
alert(newArr);
}
আপনি আরও সাধারণ আকারে স্প্রেড অপারেটর ব্যবহার করতে পারেন
[].concat(...array)
ফাংশনগুলির ক্ষেত্রে অ্যারে ফিরিয়ে দেয় তবে আর্গুমেন্ট হিসাবে পাস হবে বলে আশা করা যায়
উদাহরণ:
function expectArguments(...args){
return [].concat(...args);
}
JSON.stringify(expectArguments(1,2,3)) === JSON.stringify(expectArguments([1,2,3]))
উত্তরটি ইতিমধ্যে দেওয়া হয়েছিল, তবে আমি কেবল আমার কেকের টুকরোটি দিতে চাই। আপনি যা অর্জন করতে চান তাকে বলা হয়method borrowing
প্রসঙ্গে হয়, যখন আমরা কোনও বস্তুর কাছ থেকে কোনও পদ্ধতি নিই এবং অন্য কোনও বস্তুর প্রসঙ্গে তাকে ডাকি। অ্যারে পদ্ধতি গ্রহণ এবং তাদের আর্গুমেন্টে প্রয়োগ করা খুব সাধারণ বিষয়। আমাকে যদি আপনি একটি উদাহরণ দিতে।
সুতরাং আমাদের কাছে "সুপার" হ্যাশিং ফাংশন রয়েছে যা আর্গুমেন্ট হিসাবে দুটি সংখ্যা নেয় এবং "সুপার নিরাপদ" হ্যাশ স্ট্রিং প্রদান করে:
function hash() {
return arguments[0]+','+arguments[1];
}
hash(1,2); // "1,2" whoaa
এতদূর ভাল, তবে উপরোক্ত পদ্ধতির সাথে আমাদের সামান্য সমস্যা রয়েছে, এটি সীমাবদ্ধ, কেবল দুটি সংখ্যা নিয়ে কাজ করে, এটি গতিশীল নয়, আসুন এটি কোনও সংখ্যার সাথে কাজ করা যাক এবং আপনাকে কোনও অ্যারে পাস করতে হবে না (আপনি পারেন) আপনি এখনও জেদ থাকলে)। ঠিক আছে, যথেষ্ট আলোচনা, আসুন যুদ্ধ করি!
প্রাকৃতিক সমাধান arr.join
পদ্ধতি ব্যবহার করা হবে :
function hash() {
return arguments.join();
}
hash(1,2,4,..); // Error: arguments.join is not a function
ওহ মানুষ. দুর্ভাগ্যক্রমে, এটি কাজ করবে না। কারণ আমরা হ্যাশ (আর্গুমেন্ট) বলছি এবং আর্গুমেন্ট অবজেক্ট উভয়ই পুনরাবৃত্ত এবং অ্যারে-জাতীয়, তবে আসল অ্যারে নয়। নীচের পদ্ধতির সম্পর্কে কীভাবে?
function hash() {
return [].join.call(arguments);
}
hash(1,2,3,4); // "1,2,3,4" whoaa
কৌতুক বলা হয় method borrowing.
আমরা join
একটি নিয়মিত অ্যারে থেকে একটি পদ্ধতি ধার করি এবং এর প্রসঙ্গে এটি চালানোর জন্য [].join.
ব্যবহার [].join.call
করি arguments
।
কেন এটি কাজ করে?
এর কারণ স্থানীয় পদ্ধতির অভ্যন্তরীণ অ্যালগরিদম arr.join(glue)
খুব সহজ।
স্পেসিফিকেশন থেকে প্রায় "যেমনটি" থেকে নেওয়া:
Let glue be the first argument or, if no arguments, then a comma ",".
Let result be an empty string.
Append this[0] to result.
Append glue and this[1].
Append glue and this[2].
…Do so until this.length items are glued.
Return result.
সুতরাং, প্রযুক্তিগতভাবে এটি এটি নেয় এবং এটি [0], এটি [1]… ইত্যাদি একসাথে যোগদান করে। এটি ইচ্ছাকৃতভাবে এমনভাবে লেখা হয়েছে যাতে কোনও অ্যারের মতো (কোনও কাকতালীয় নয়, অনেকগুলি পদ্ধতি এই অনুশীলনটি অনুসরণ করে) মঞ্জুরি দেয়। এজন্য এটিও কাজ করেthis=arguments.