জাভাস্ক্রিপ্ট 'বাইন্ড' পদ্ধতির ব্যবহার কী?


650

bind()জাভাস্ক্রিপ্ট ব্যবহার কি ?


8
আমার স্ট্যান্ডার্ড ইউজ কেস:select = document.querySelector.bind(document)
সাভিং করা

1
Anyone এবং যে কেউ ভাবছেন, তার কারণটির কারণ হ'ল thisঅন্যথায় window, বিশ্বব্যাপী অবজেক্টটি উল্লেখ করা উচিত । সহ document.querySelector.bind(document), আমরা নিশ্চিত করি যে selectএর thisউল্লেখ করে documentএবং না window। কেউ যদি আমাকে ভুল বোঝে তবে আমাকে সংশোধন করুন though
আলেকসান্দ্র

উত্তর:


612

বাইন্ড একটি নতুন ফাংশন তৈরি করে যা ফাংশনটির thisঅভ্যন্তরে প্যারামিটারটিকে পাস করতে বাধ্য করবে bind()

এখানে একটি উদাহরণ রয়েছে যা দেখায় যে কীভাবে bindকোনও সদস্য পদ্ধতি পাস করতে ব্যবহার করতে হয় যার সঠিক রয়েছে this:

var myButton = {
  content: 'OK',
  click() {
    console.log(this.content + ' clicked');
  }
};

myButton.click();

var looseClick = myButton.click;
looseClick(); // not bound, 'this' is not myButton - it is the globalThis

var boundClick = myButton.click.bind(myButton);
boundClick(); // bound, 'this' is myButton

যা মুদ্রণ করে:

OK clicked
undefined clicked
OK clicked

আপনি 1 ম ( this) প্যারামিটারের পরে অতিরিক্ত পরামিতিগুলি যুক্ত করতে পারেন এবং bindসেই মানগুলিতে মূল ফাংশনে পাস করবেন। বাউন্ড ফাংশনে আপনি পরে যে কোনও অতিরিক্ত পরামিতি পাঠিয়েছেন তা বাউন্ড প্যারামিটারগুলির পরে পাস করা হবে:

// Example showing binding some parameters
var sum = function(a, b) {
  return a + b;
};

var add5 = sum.bind(null, 5);
console.log(add5(10));

যা মুদ্রণ করে:

15

পরীক্ষা করে দেখুন জাভাস্ক্রিপ্ট ফাংশন বেঁধে আরও তথ্য এবং ইন্টারেক্টিভ উদাহরণের জন্য।

আপডেট: ECMAScript 2015 =>ফাংশনগুলির জন্য সমর্থন যোগ করে। =>ফাংশনগুলি আরও কমপ্যাক্ট এবং thisতাদের সংজ্ঞায়িত ক্ষেত্র থেকে পয়েন্টারটি পরিবর্তন করবেন না , তাই আপনাকে bind()প্রায়শই ব্যবহার করার প্রয়োজন নাও হতে পারে । উদাহরণস্বরূপ, যদি আপনি কোনও ডিওএম ইভেন্টের কলব্যাকটি Buttonহুক করার জন্য প্রথম উদাহরণ থেকে কোনও ফাংশন চান, তবে নিম্নলিখিত কাজগুলি করার clickজন্য সমস্ত বৈধ উপায় রয়েছে:

var myButton = {
  ... // As above
  hookEvent(element) {
    // Use bind() to ensure 'this' is the 'this' inside click()
    element.addEventListener('click', this.click.bind(this));
  }
};

বা:

var myButton = {
  ... // As above
  hookEvent(element) {
    // Use a new variable for 'this' since 'this' inside the function
    // will not be the 'this' inside hookEvent()
    var me = this;
    element.addEventListener('click', function() { me.click() });
  }
};    

বা:

var myButton = {
  ... // As above
  hookEvent(element) {
    // => functions do not change 'this', so you can use it directly
    element.addEventListener('click', () => this.click());
  }
};

6
দুর্দান্ত ব্যাখ্যা, তবে আমি যেখানে প্রথম বিকল্পের পরিবর্তে আপনি বর্ণিত তৃতীয় বিকল্পটি ব্যবহার করতে চাই সেই উদাহরণগুলি খুঁজতে আমি সংগ্রাম করছি। আপনি তৃতীয় বিকল্পটি ব্যবহার করার প্রয়োজন অনুভব করে এমন পরিস্থিতি বর্ণনা করতে পারেন?
ড্যারিল

5
আমি মনে করি না আমি 'বাই' বাঁধাইয়ের জন্য অন্য বাইন্ড ব্যবহার করেছি। অন্য ফর্মটি আংশিক প্রয়োগ হিসাবে পরিচিত এবং কার্যকরী ভাষায় বেশ সাধারণ pretty আমি ধারণা করি এটি সম্পূর্ণতার জন্য অন্তর্ভুক্ত।
nkron

42
যদি কেউ ভাবছেন যে লুজিক্লিক () আমার বুটনের সাথে আবদ্ধ না হয়, কারণ "এটি" ফাংশনটি (লুজক্লিক ()) কে অনুরোধ করে এমন বস্তুকে বোঝায়। লুজ ক্লিক () কে যে বস্তুটি আহ্বান করে তা হ'ল গ্লোবাল অবজেক্ট।
পোকারো

4
@ ড্যারিল - ইভেন্ট হ্যান্ডলারের প্যারামিটারগুলি পাস করার একটি কারণ। আপনার যদি এই প্রতিক্রিয়া কোডটি থাকে:, var Note = React.createClass({ add: function(text){ ... }, render: function () { return <button onClick={this.add.bind(null, "New Note")}/> } }তারপরে বোতামটি ক্লিক করা হলে এটি addপদ্ধতিতে একটি নতুন পরামিতি পাঠ্য "নতুন নোট" সরবরাহ করবে ।
পি। মায়ার নরে

2
"আপনি 1 ম প্যারামিটারের পরে অতিরিক্ত পরামিতি যুক্ত করতে পারেন এবং আবদ্ধ ফাংশনে আপনি যে অতিরিক্ত প্যারামিটারগুলি দিয়ে যান সেই প্যারামিটারগুলিতে পাস করার আগে মূল ফাংশনে বাইন্ডগুলি সেই মানগুলিতে চলে যাবে:" এই শব্দটি বিভ্রান্তিকর।
কেন

271

এর সহজ ব্যবহারটি bind()হ'ল কোনও ফাংশন তৈরি করা, এটি যেমন বলা হোক না কেন, একটি নির্দিষ্ট thisমান সহ ডাকা হয়।

x = 9;
var module = {
    x: 81,
    getX: function () {
        return this.x;
    }
};

module.getX(); // 81

var getX = module.getX;
getX(); // 9, because in this case, "this" refers to the global object

// create a new function with 'this' bound to module
var boundGetX = getX.bind(module);
boundGetX(); // 81

আরও তথ্যের জন্য এই লিঙ্কটি উল্লেখ করুন

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind


38
বাঁধাই করার সর্বোত্তম ভূমিকা () আমি কখনও দেখেছি।
থমাসফ্ল

3
দুর্দান্ত উত্তর, যেহেতু আপনার উদাহরণটির জন্য ভাষার বৈশিষ্ট্যগুলি (যেমন prototype) প্রাথমিকভাবে নতুন হতে পারে সে সম্পর্কে জ্ঞানের প্রয়োজন নেই ।
এডওয়ার্ড

1
সংযোগ এবং খুব পরিষ্কার!
পেপিজি

172

বাঁধাই অনুমতি দেয়-

  • "এটি" এর মান একটি নির্দিষ্ট অবজেক্টে সেট করুন। একে মাঝে মাঝে খুব সহায়ক হয়ে এই কি উদ্দেশ্যে করা হচ্ছে নয়।
  • পুনরায় ব্যবহার পদ্ধতি
  • একটি ফাংশন কারি

উদাহরণস্বরূপ, আপনার মাসিক ক্লাবের ফিগুলি কাটাতে একটি ফাংশন রয়েছে

function getMonthlyFee(fee){
  var remaining = this.total - fee;
  this.total = remaining;
  return this.name +' remaining balance:'+remaining;
}

এখন আপনি কোনও আলাদা ক্লাব সদস্যের জন্য এই ফাংশনটি পুনরায় ব্যবহার করতে চান। নোট করুন যে মাসিক ফি সদস্যের থেকে পৃথক হয়ে পৃথক হবে।

আসুন কল্পনা করুন যে রাহেলের 500 টি ভারসাম্য রয়েছে এবং 90 এর মাসিক সদস্যপদ ফি রয়েছে।

var rachel = {name:'Rachel Green', total:500};

এখন, এমন একটি ফাংশন তৈরি করুন যা তার অ্যাকাউন্ট থেকে প্রতিমাসে ফি কেটে নেওয়ার জন্য বারবার ব্যবহার করা যেতে পারে

//bind
var getRachelFee = getMonthlyFee.bind(rachel, 90);
//deduct
getRachelFee();//Rachel Green remaining balance:410
getRachelFee();//Rachel Green remaining balance:320

এখন, একই getMonthlyFee ফাংশনটি অন্য সদস্যের জন্য আলাদা সদস্যপদ ফি সহ ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, রস গেলারের 250 টি ব্যালেন্স এবং 25 এর মাসিক ফি রয়েছে

var ross = {name:'Ross Geller', total:250};
//bind
var getRossFee = getMonthlyFee.bind(ross, 25);
//deduct
getRossFee(); //Ross Geller remaining balance:225
getRossFee(); //Ross Geller remaining balance:200

9
আপনার উদাহরণে আমি মনে করি যে আমি নতুন কীওয়ার্ডের সাথে ইনস্ট্যান্টেড সদস্য সদস্য অবজেক্টটি সেট আপ করতে চাইব যেখানে প্রতিটি সদস্যের নিজস্ব সম্পত্তি / পদ্ধতি ছিল। তারপরে এটি কেবল ross.getMonthlyFee (25) এর বিষয়। এই উদাহরণটি কি কেবলমাত্র বাঁধাই () ব্যবহারের জন্য প্রদর্শিত হয়েছিল, বা আপনার পদ্ধতির কোনও সুবিধা আছে?
ড্যারিল

কারি একটি ফাংশন এক ভালবাসা!
জেরি লিউ

আমি জানি না, তবে আমি var getRachelFee = getMonthlyFee (রেচেল, 90) করব; এবং ফাংশন হবে ফাংশন getMonthlyFee (সদস্য, ফি) - লাইন বরাবর কিছু।
মিগুয়েল

1
@ খানশার্প আপনার উত্তরটি সঠিক, তবে এটি টিভি-সিরিজ সম্পর্কিত আপনার রেফারেন্স বন্ধুরা আমাকে মন্তব্য এবং উজ্জীবিত করেছে। উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ 🤗।
সৌরভ লেন্ডে

79

থেকে MDN ডক্স উপর Function.prototype.bind():

বেঁধে () পদ্ধতি একটি নতুন ফাংশন যা, যখন বলা হয়, তার এই শব্দ সেট দেওয়া মানটি পথ আছে পূর্ববর্তী যখন নতুন ফাংশন বলা হয় কোন প্রদত্ত যুক্তিগুলির একটি প্রদত্ত ক্রম সঙ্গে সৃষ্টি করে।

সুতরাং যে কি মানে?!

ভাল, এর মতো দেখতে একটি ফাংশন নেওয়া যাক:

var logProp = function(prop) {
    console.log(this[prop]);
};

এখন, আসুন এমন একটি জিনিস নেওয়া যাক:

var Obj = {
    x : 5,
    y : 10
};

আমরা আমাদের ফাংশনটিকে এইভাবে আমাদের অবজেক্টের সাথে আবদ্ধ করতে পারি:

Obj.log = logProp.bind(Obj);

এখন, আমরা Obj.logআমাদের কোডের যে কোনও জায়গায় চালাতে পারি :

Obj.log('x'); // Output : 5
Obj.log('y'); // Output : 10

এটি কাজ করে, কারণ আমরা thisআমাদের বস্তুর মান সীমাবদ্ধ করি Obj


এটি সত্যিই আকর্ষণীয় হয়ে ওঠে, যখন আপনি কেবল তার মানকেই রাখেন না this, তবে তার যুক্তির জন্যও prop:

Obj.logX = logProp.bind(Obj, 'x');
Obj.logY = logProp.bind(Obj, 'y');

আমরা এখন এটি করতে পারি:

Obj.logX(); // Output : 5
Obj.logY(); // Output : 10

এর বিপরীতে Obj.log, আমাদের পাস করতে হবে না xবা y, কারণ আমরা যখন আমাদের বাধ্যবাধকতার কাজটি করেছিলাম তখন আমরা সেই মানগুলি পাস করেছি।


9
এই উত্তর আরও প্রেম পেতে হবে। ভাল করে বুঝিয়েছি।
চक्स

সাধারণ ওভারভিউ এবং নির্দিষ্ট উদাহরণের খুব ভাল সংমিশ্রণ।
কেন

সোজা 100 টি আপ আপ করা বাটনটি কোথায়?
কুশলভম

এর সাথে আমি বাইন্ড "নাল" ব্যবহার বুঝতে আংশিকভাবে প্রয়োগ ফাংশনগুলির MDN ডক্স বিভাগ পড়ারও পরামর্শ দেব recommend বাঁধাইয়ের বেশিরভাগ ব্যবহারের জন্য এটি ফটকগুলি বন্ধ করে দেওয়া উচিত। বিকাশকারী.মোজিলা.আর.ইন
ডকস

23

ভেরিয়েবলগুলির স্থানীয় এবং বৈশ্বিক স্কোপ রয়েছে। ধরা যাক আমরা একই নামের সাথে দুটি ভেরিয়েবল পেয়েছি। একটি বিশ্বব্যাপী সংজ্ঞায়িত করা হয় এবং অন্যটি একটি ফাংশন ক্লোজারের মধ্যে সংজ্ঞায়িত করা হয় এবং আমরা ফাংশন বন্ধের মধ্যে থাকা ভেরিয়েবলের মান পেতে চাই। সেক্ষেত্রে আমরা এই বাঁধাই () পদ্ধতিটি ব্যবহার করি। নীচের সহজ উদাহরণটি দেখুন:

var x = 9; // this refers to global "window" object here in the browser
var person = {
  x: 81,
  getX: function() {
    return this.x;
  }
};

var y = person.getX; // It will return 9, because it will call global value of x(var x=9).

var x2 = y.bind(person); // It will return 81, because it will call local value of x, which is defined in the object called person(x=81).

document.getElementById("demo1").innerHTML = y();
document.getElementById("demo2").innerHTML = x2();
<p id="demo1">0</p>
<p id="demo2">0</p>


18

সারসংক্ষেপ:

bind()পদ্ধতি একটি প্রথম আর্গুমেন্ট হিসাবে একটি বস্তু নেয় এবং একটি নতুন ফাংশন তৈরি করে। ফাংশনটি যখন অনুরোধ করা হয় তখন ফাংশন বডিটির মানটি thisসেই বস্তু হবে যা bind()ফাংশনে একটি আর্গুমেন্ট হিসাবে পাস হয়েছিল ।

কি করে thisযাইহোক জেএসে কাজ

thisজাভাস্ক্রিপ্টের মান সর্বদা নির্ভর করে যা অবজেক্ট ফাংশন বলা হয় তার উপর নির্ভর করে। এর মান সর্বদা বিন্দুর বাম বস্তুকে বোঝায় যেখানে ফাংশন বলা হয় । বৈশ্বিক সুযোগের ক্ষেত্রে এটি window(বা globalইন nodeJS)। শুধু call, applyএবং bindএই ভিন্নভাবে বাঁধাই পরিবর্তন করতে পারেন। এই কীওয়ার্ডটি কীভাবে কাজ করে তা দেখানোর জন্য এখানে একটি উদাহরণ দেওয়া হল:

let obj = {
  prop1: 1,
  func: function () { console.log(this); } 
}

obj.func();   // obj left of the dot so this refers to obj

const customFunc = obj.func;  // we store the function in the customFunc obj

customFunc();  // now the object left of the dot is window, 
               // customFunc() is shorthand for window.customFunc()
               // Therefore window will be logged

বাইন্ড কিভাবে ব্যবহৃত হয়?

বাইন্ড thisএকটি নির্দিষ্ট বস্তু যেখানে thisউল্লেখ করা হবে তাতে কীওয়ার্ড নিয়ে সমস্যাগুলি কাটিয়ে উঠতে সহায়তা করতে পারে। উদাহরণ স্বরূপ:

var name = 'globalName';

const obj = {
  name: 'myName',
  sayName: function () { console.log(this.name);}
}

const say = obj.sayName; // we are merely storing the function the value of this isn't magically transferred

say(); // now because this function is executed in global scope this will refer to the global var

const boundSay = obj.sayName.bind(obj); // now the value of this is bound to the obj object

boundSay();  // Now this will refer to the name in the obj object: 'myName'

ফাংশনটি কোনও নির্দিষ্ট thisমানের সাথে আবদ্ধ হয়ে গেলে আমরা এটিকে চারপাশে পাস করতে পারি এবং এমনকি এটি অন্য অবজেক্টের বৈশিষ্ট্যে রেখে দিতে পারি। মান thisএকই থাকবে।


3
সম্পর্কে আপনার কোডে আপনার মন্তব্য objবস্তুর কারণ এটি ডট বাম এবং হয় windowকারণ এটি জন্য সাধারণভাবে সংক্ষেপে হয় অবজেক্ট window.custFunc()এবং windowআমার জন্য খুব অন্তর্দৃষ্টিপূর্ণ ডট এর ছেড়ে দেওয়া হয় হয়।
nzaleski

12

আমি বাইন্ডটি তাত্ত্বিক পাশাপাশি বাস্তব হিসাবেও ব্যাখ্যা করব

জাভাস্ক্রিপ্টে বাইন্ড করা একটি পদ্ধতি - ফাংশন.প্রোটোটাইপ.বাইন্ড। বাইন্ড একটি পদ্ধতি। এটি ফাংশন প্রোটোটাইপ বলা হয়। এই পদ্ধতিটি এমন একটি ক্রিয়াকলাপ তৈরি করে যার শরীরে এটি বলা হয় এমন ফাংশনের অনুরূপ তবে 'এটি' বাইন্ড পদ্ধতিতে প্রথম প্যারামিটারকে বোঝায়। এর সিনট্যাক্সটি হ'ল

     var bindedFunc = Func.bind(thisObj,optionsArg1,optionalArg2,optionalArg3,...);

উদাহরণ: -

  var checkRange = function(value){
      if(typeof value !== "number"){
              return false;
      }
      else {
         return value >= this.minimum && value <= this.maximum;
      }
  }

  var range = {minimum:10,maximum:20};

  var boundedFunc = checkRange.bind(range); //bounded Function. this refers to range
  var result = boundedFunc(15); //passing value
  console.log(result) // will give true;

এটি মূলত ফাংশনের ভিতরে যা কিছু 'এই' করে তোলে যা আপনি যে বস্তুতে প্রবেশ করেন, সঠিক?
হার্ভে লিন

11

বাইন্ড () পদ্ধতিটি একটি নতুন ফাংশন দৃষ্টান্ত তৈরি করে যার মানটি বাঁধাই () -তে প্রবেশ করা মানের সাথে আবদ্ধ। উদাহরণ স্বরূপ:

   window.color = "red"; 
   var o = { color: "blue" }; 
   function sayColor(){ 
       alert(this.color); 
   } 
   var objectSayColor = sayColor.bind(o); 
   objectSayColor(); //blue 

এখানে, বাইন্ড () কল করে এবং অবজেক্টে ওকে পাস করার মাধ্যমে sayColor () থেকে অবজেক্টসে কলর () নামে একটি নতুন ফাংশন তৈরি করা হয়েছে। অবজেক্টসয়ে কলার () ফাংশনটির ও এর সমান একটি মান রয়েছে, তাই ফাংশনটিকে কল করে এমনকি একটি বিশ্বব্যাপী কল হিসাবে, ফলাফলটি "নীল" প্রদর্শিত হবে।

তথ্যসূত্র: নিকোলাস সি জাকাস - ওয়েব ডেভলপারদের জন্য পেশাদার জাভাস্ক্রিপ্ট


সংক্ষিপ্ত এবং লকোনিক উদাহরণ
আহমদ শরীফ

9

মানগুলিতে যুক্তি যুক্ত করে একটি নতুন ফাংশন তৈরি করা

অন্তর্ভুক্ত bindযুক্তি সহ নির্দিষ্ট মানগুলিতে আবদ্ধ এক বা একাধিক আর্গুমেন্ট সহ পদ্ধতিটি অন্য ফাংশন থেকে একটি নতুন ফাংশন তৈরি করে this

আংশিক প্রয়োগ

এটি আংশিক প্রয়োগের একটি উদাহরণ । সাধারণত আমরা এর সমস্ত আর্গুমেন্টের সাথে একটি ফাংশন সরবরাহ করি যা একটি মান দেয়। এটি ফাংশন অ্যাপ্লিকেশন হিসাবে পরিচিত। আমরা এর তর্কগুলিতে ফাংশনটি প্রয়োগ করছি।

একটি উচ্চতর আদেশ ফাংশন (এইচএফ)

আংশিক প্রয়োগ হ'ল অর্ডার ফাংশন (এইচএফ) এর একটি উদাহরণ কারণ এটি কয়েকটি সংখ্যক যুক্তি সহ একটি নতুন ফাংশন দেয়।

একাধিক তর্ক যুক্ত B

আপনি bindএকাধিক যুক্তিযুক্ত ফাংশনকে নতুন ফাংশনে রূপান্তর করতে ব্যবহার করতে পারেন ।

function multiply(x, y) { 
    return x * y; 
}

let multiplyBy10 = multiply.bind(null, 10);
console.log(multiplyBy10(5));

তাত্ক্ষণিক পদ্ধতি থেকে স্ট্যাটিক ফাংশনে রূপান্তর

সর্বাধিক প্রচলিত ব্যবহারের ক্ষেত্রে, যখন একটি যুক্তির সাহায্যে ডাকা হয় তখন bindপদ্ধতিটি একটি নতুন ফাংশন তৈরি করে যার thisমান নির্দিষ্ট মানের সাথে আবদ্ধ থাকে। বাস্তবে এটি একটি উদাহরণ পদ্ধতিটিকে একটি স্ট্যাটিক পদ্ধতিতে রূপান্তর করে।

function Multiplier(factor) { 
    this.factor = factor;
}

Multiplier.prototype.multiply = function(x) { 
    return this.factor * x; 
}

function ApplyFunction(func, value) {
    return func(value);
}

var mul = new Multiplier(5);

// Produces garbage (NaN) because multiplying "undefined" by 10
console.log(ApplyFunction(mul.multiply, 10));

// Produces expected result: 50
console.log(ApplyFunction(mul.multiply.bind(mul), 10));

একটি স্টেটফুল কলব্যাক বাস্তবায়ন করা হচ্ছে

নিম্নলিখিত উদাহরণটি দেখায় যে কিভাবে বাইন্ডিং ব্যবহার করে thisকোনও অবজেক্ট পদ্ধতিকে কলব্যাক হিসাবে কাজ করতে সক্ষম করতে পারে যা সহজেই কোনও সামগ্রীর অবস্থা আপডেট করতে পারে।

function ButtonPressedLogger()
{
   this.count = 0;
   this.onPressed = function() {
      this.count++;
      console.log("pressed a button " + this.count + " times");
   }
   for (let d of document.getElementsByTagName("button"))
      d.onclick = this.onPressed.bind(this);
}

new ButtonPressedLogger();      
<button>press me</button>
<button>no press me</button>


6

উল্লিখিত হিসাবে, Function.bind()আপনাকে প্রসঙ্গটি নির্দিষ্ট করতে দেয় যে ফাংশনটি কার্যকর হবে (যা এটি আপনাকে কী কী শব্দটিতে thisফাংশনের শরীরে সমাধান করবে তা পাস করতে দেয় ।

অনুরূপ পরিষেবা সম্পাদন করে এমন বেশ কয়েকটি এনালগাস টুলকিট এপিআই পদ্ধতি:

jQuery.proxy ()

Dojo.hitch ()


3
/**
 * Bind is a method inherited from Function.prototype same like call and apply
 * It basically helps to bind a function to an object's context during initialisation 
 * 
 * */

window.myname = "Jineesh";  
var foo = function(){ 
  return this.myname;
};

//IE < 8 has issues with this, supported in ecmascript 5
var obj = { 
    myname : "John", 
    fn:foo.bind(window)// binds to window object
}; 
console.log( obj.fn() ); // Returns Jineesh

3

নীচে তালিকাভুক্ত সহজ প্রোগ্রামটি বিবেচনা করুন,

//we create object user
let User = { name: 'Justin' };

//a Hello Function is created to Alert the object User 
function Hello() {
  alert(this.name);
}

//since there the value of this is lost we need to bind user to use this keyword
let user = Hello.bind(User);
user();

//we create an instance to refer the this keyword (this.name);

2

বাইন্ড ফাংশনটি একই ফাংশন বডির সাথে একটি নতুন ফাংশন তৈরি করে যা এটি কল করে calling এটি এই আর্গুমেন্টের সাথে ডাকা হয় hyযে আমরা বাইন্ড মজা ব্যবহার করি। : প্রতিবার যখন একটি নতুন উদাহরণ তৈরি করা হয় এবং আমাদের প্রথম প্রাথমিক উদাহরণটি ব্যবহার করতে হয় তখন আমরা বাইন্ড ফান ব্যবহার করি W আমরা বাইন্ড ফানকে ওভাররাইড করতে পারি না imp কেবল এটি শ্রেণীর প্রাথমিক অবজেক্টটি সঞ্চয় করে।

setInterval(this.animate_to.bind(this), 1000/this.difference);

0

আরেকটি ব্যবহার হ'ল আপনি বাইন্ডেড ফাংশনটিকে অন্য কোনও ফাংশনের আর্গুমেন্ট হিসাবে পাস করতে পারেন যা অন্য কার্যকরকরণ প্রসঙ্গে চালিত হয়।

var name = "sample";
function sample(){
  console.log(this.name);
}
var cb = sample.bind(this);

function somefunction(cb){
  //other code
  cb();
}
somefunction.call({}, cb);

0

সহজ উদাহরণ

function lol(text) {
    console.log(this.name, text);
}

lol(); // undefined undefined
lol('first'); // undefined first
lol.call({name: 'karl'}); // karl undefined
lol.call({name: 'karl'}, 'second'); // karl second
lol.apply({name: 'meg'}); // meg undefined
lol.apply({name: 'meg'}, ['third']); // meg third
const newLol = lol.bind({name: 'bob'});
newLol(); // bob undefined
newLol('fourth'); // bob fourth

0

বাঁধাই পদ্ধতি

একটি বাইন্ড বাস্তবায়ন এর মতো দেখতে পারে:

Function.prototype.bind = function () {
  const self = this;
  const args = [...arguments];
  const context = args.shift();

  return function () {
    return self.apply(context, args.concat([...arguments]));
  };
};

বাইন্ড ফাংশনটি অনেকগুলি আর্গুমেন্ট নিতে পারে এবং একটি নতুন ফাংশন ফিরে আসতে পারে

নতুন ফাংশনটি জেএস Function.prototype.applyপদ্ধতিটি ব্যবহার করে আসল ফাংশনটিকে কল করবে । পদ্ধতি প্রসঙ্গটা (যেমন লক্ষ্য ফাংশন প্রেরণ করা প্রথম আর্গুমেন্ট ব্যবহার করবে ), এবং দ্বিতীয় অ্যারের যুক্তি পদ্ধতি লক্ষ্য ফাংশন থেকে আর্গুমেন্ট বাকি সংমিশ্রণ থাকবে আর্গুমেন্ট সহ CONCAT আগমন কল ব্যবহৃত ফাংশন (সেই ক্রমে)। একটি উদাহরণ এরকম কিছু দেখতে পারে:
applythisapply

function Fruit(emoji) {
  this.emoji = emoji;
}

Fruit.prototype.show = function () {
  console.log(this.emoji);
};

const apple = new Fruit('🍎');
const orange = new Fruit('🍊');

apple.show();  // 🍎
orange.show(); // 🍊

const fruit1 = apple.show;
const fruit2 = apple.show.bind();
const fruit3 = apple.show.bind(apple);
const fruit4 = apple.show.bind(orange);

fruit1(); // undefined
fruit2(); // undefined
fruit3(); // 🍎
fruit4(); // 🍊


0

সরল ব্যাখ্যা:

বাঁধাই করা() একটি নতুন ফাংশন তৈরি করুন, কোনও ফাংশনে একটি নতুন রেফারেন্স এটি আপনাকে ফিরিয়ে দেয়।

এই কীওয়ার্ডের পরে প্যারামিটারে আপনি পূর্বনির্ধারণ করতে চান এমন প্যারামিটারে পাস করেন। আসলে এটি তাত্ক্ষণিকভাবে কার্যকর করা হয় না, কেবল মৃত্যুদন্ড কার্যকর করার জন্য প্রস্তুত করে।

আপনি যতগুলি পরামিতি চান সেগুলি প্রাক কনফিগার করতে পারেন।

বাঁধাই বোঝার সহজ উদাহরণ:

function calculate(operation) {
  if (operation === 'ADD') {
   alert('The Operation is Addition');
  } else if (operation === 'SUBTRACT') {
   alert('The Operation is Subtraction');
  }
}

addBtn.addEventListener('click', calculate.bind(this, 'ADD'));
subtractBtn.addEventListener('click', calculate.bind(this, 'SUBTRACT'));

-1

বাঁধাই এমন একটি ফাংশন যা জাভা স্ক্রিপ্ট প্রোটোটাইপে উপলভ্য, যেমন নামটি নির্দেশ করা হয় যে বাঁধাটি আপনার ফাংশন কলটিকে প্রসঙ্গের সাথে আবদ্ধ করতে ব্যবহার করা হয় যেমন আপনি উদাহরণস্বরূপ কাজ করছেন:

    var rateOfInterest='4%';
    var axisBank=
    {
    rateOfInterest:'10%',
    getRateOfInterest:function()
    {
    return this.rateOfInterest;
    }
    }
    axisBank.getRateOfInterest() //'10%' 


    let knowAxisBankInterest=axisBank.getRateOfInterest // when you want to assign the function call to a varaible we use this syntax
    knowAxisBankInterest(); // you will get output as '4%' here by default the function is called wrt global context

let knowExactAxisBankInterest=knowAxisBankInterest.bind(axisBank);     //so here we need bind function call  to its local context


    knowExactAxisBankInterest() // '10%' 

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.