আপনি যখন কোনও পদ্ধতি চালিত করেন (অর্থাত্ কোনও বস্তুকে নির্ধারিত ফাংশন), তার ভিতরে thisআপনি এই বস্তুর উল্লেখ করতে ভেরিয়েবল ব্যবহার করতে পারেন , উদাহরণস্বরূপ:
var obj = {
someProperty: true,
someMethod: function() {
console.log(this.someProperty);
}
};
obj.someMethod(); // logs true
আপনি যদি একটি পদ্ধতি থেকে অন্য কোনও বস্তুকে অর্পণ করেন তবে এর thisভেরিয়েবলটি নতুন বস্তুকে বোঝায়, উদাহরণস্বরূপ:
var obj = {
someProperty: true,
someMethod: function() {
console.log(this.someProperty);
}
};
var anotherObj = {
someProperty: false,
someMethod: obj.someMethod
};
anotherObj.someMethod(); // logs false
আপনি requestAnimationFrameপদ্ধতি নির্ধারণ করার সময় একই জিনিস ঘটেwindow অন্য কোনও অবজেক্টের । নেটিভ ফাংশন, যেমন এর মতো, এটি অন্যান্য প্রসঙ্গে কার্যকর করা থেকে অন্তর্নির্মিত সুরক্ষা রয়েছে।
একটি Function.prototype.call()ফাংশন রয়েছে, যা আপনাকে অন্য প্রসঙ্গে কোনও ফাংশনটিতে কল করার অনুমতি দেয়। আপনাকে কেবল এই পদ্ধতির প্রথম পরামিতি হিসাবে এটি (প্রসঙ্গ হিসাবে ব্যবহৃত হবে এমন বস্তু) পাস করতে হবে। উদাহরণস্বরূপ alert.call({})দেয় TypeError: Illegal invocation। তবে, alert.call(window)সূক্ষ্মভাবে কাজ করে, কারণ এখনalert এটির আসল সুযোগে মৃত্যুদন্ড কার্যকর করা হয়েছে।
আপনি যদি .call()এটির মতো আপনার অবজেক্টটি ব্যবহার করেন:
support.animationFrame.call(window, function() {});
এটি সূক্ষ্মভাবে কাজ করে, কারণ requestAnimationFrameএর পরিধিতে কার্যকর করা হয়window আপনার বস্তুর পরিবর্তে ।
যাইহোক, .call()আপনি এই পদ্ধতিটি কল করতে প্রতিটি সময় ব্যবহার করা খুব মার্জিত সমাধান নয়। পরিবর্তে, আপনি ব্যবহার করতে পারেন Function.prototype.bind()। এটির সাথে একইরকম প্রভাব রয়েছে .call()তবে ফাংশনটি কল করার পরিবর্তে এটি একটি নতুন ফাংশন তৈরি করে যা নির্দিষ্ট প্রসঙ্গে সর্বদা ডাকা হবে। উদাহরণ স্বরূপ:
window.someProperty = true;
var obj = {
someProperty: false,
someMethod: function() {
console.log(this.someProperty);
}
};
var someMethodInWindowContext = obj.someMethod.bind(window);
someMethodInWindowContext(); // logs true
এর একমাত্র নেতিবাচকতা এটি Function.prototype.bind()হ'ল এটি ECMAScript 5 এর একটি অংশ যা আই <= 8 এ সমর্থিত নয় । ভাগ্যক্রমে, MDN- তে একটি পলিফিল রয়েছে ।
আপনি সম্ভবত ইতিমধ্যে নির্ধারিত হিসাবে, আপনি এর প্রসঙ্গে .bind()সর্বদা কার্যকর করতে ব্যবহার করতে পারেন । আপনার কোডটি দেখতে এমন হতে পারে:requestAnimationFramewindow
var support = {
animationFrame: (window.requestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame).bind(window)
};
তারপরে আপনি সহজভাবে ব্যবহার করতে পারেন support.animationFrame(function() {});।