„Javascript“ skambutis () ir taikymas () vs prisijungimas ()?

Aš jau žinau, kad apply ir call yra panašios funkcijos, nustatančios this (funkcijos kontekstas).

Skirtumas yra tai, kaip siunčiame argumentus (rankinis masyvas vs)

Klausimas:

Bet kada turėčiau naudoti „ bind() metodą?

 var obj = { x: 81, getX: function() { return this.x; } }; alert(obj.getX.bind(obj)()); alert(obj.getX.call(obj)); alert(obj.getX.apply(obj)); 

jsbin

684
17 марта '13 в 0:40 2013-03-17 00:40 Royi Namir paklausė kovo 17 d. 13 val. 0:40 2013-03-17 00:40
@ 19 atsakymų

Naudokite .bind() kai norite, kad ši funkcija būtų paskambinta vėliau konkrečiu kontekstu, naudinga įvykiuose. Naudokite .call() arba .apply() kai norite iš karto skambinti funkcijai ir pakeisti kontekstą.

Skambinimas / taikymas Skambinkite funkcijai nedelsiant, o bind grąžina funkciją, kuri, paleisdama vėl, turės tinkamą kontekstą, kad būtų galima skambinti pradinei funkcijai. Tokiu būdu galite išlaikyti kontekstą asinchroniniuose atšaukimuose ir įvykiuose.

Tai darau daug:

 function MyObject(element) { this.elm = element; element.addEventListener('click', this.onClick.bind(this), false); }; MyObject.prototype.onClick = function(e) { var t=this; //do something with [t]... //without bind the context of this function wouldn't be a MyObject //instance as you would normally expect. }; 

Aš jį plačiai naudojame „Node.js“ asinchroniniams atsiliepimams, dėl kurių noriu perduoti nario metodą, tačiau noriu, kad kontekstas būtų toks, kuris pradėjo asinchroninį veiksmą.

Paprastas naivus įpareigojimas būtų toks:

 Function.prototype.bind = function(ctx) { var fn = this; return function() { fn.apply(ctx, arguments); }; }; 

Jame yra daugiau (pvz., Perduodami kiti argumentai), tačiau galite daugiau sužinoti apie tai ir pamatyti realų įgyvendinimą MDN .

Tikiuosi, kad tai padės.

716
17 марта '13 в 0:44 2013-03-17 00:44 atsakymas pateikiamas Čadui, kovo 17 d., 13 val. 0:44 2013-03-17 00:44

Jie visi prideda šią funkciją (arba objektą), o skirtumas yra funkcijų skambutyje (žr. Žemiau).

Šis skambutis priskiriamas tai funkcijai ir nedelsiant atlieka funkciją:

 var person = { name: "James Smith", hello: function(thing) { console.log(this.name + " says hello " + thing); } } person.hello("world"); // output: "James Smith says hello world" person.hello.call({ name: "Jim Smith" }, "world"); // output: "Jim Smith says hello world" 

susieja tai su funkcija, ir ją reikia atskirai pavadinti taip:

 var person = { name: "James Smith", hello: function(thing) { console.log(this.name + " says hello " + thing); } } person.hello("world"); // output: "James Smith says hello world" var helloFunc = person.hello.bind({ name: "Jim Smith" }); helloFunc("world"); // output: Jim Smith says hello world" 
border=0

ar panašiai:

 ... var helloFunc = person.hello.bind({ name: "Jim Smith" }, "world"); helloFunc(); // output: Jim Smith says hello world" 

taikomas panašus į skambutį , išskyrus tai, kad jis užima tokį objektą kaip masyvas, o ne nurodo argumentus vienu metu:

 function personContainer() { var person = { name: "James Smith", hello: function() { console.log(this.name + " says hello " + arguments[1]); } } person.hello.apply(person, arguments); } personContainer("world", "mars"); // output: "James Smith says hello mars", note: arguments[0] = "world" , arguments[1] = "mars" 
397
10 авг. atsakymą pateikė CuriousSuperhero 10 rug . 2015-08-10 17:50 '15, 17:50, 2015-08-10 17:50

SIMPLEST atsakymas

  • Ryšys skambina funkcijai ir leidžia jums perduoti argumentus po vieną.
  • Taikykite skambučius funkcijai ir leidžia perduoti argumentus kaip masyvą.
  • „Bind“ grąžina naują funkciją, kuri leidžia jums perduoti šį masyvą ir bet kokį skaičių argumentų.

Taikyti prieš Iššūkis ir susieti pavyzdžiai

Skambinkite

 var person1 = {firstName: 'Jon', lastName: 'Kuperman'}; var person2 = {firstName: 'Kelly', lastName: 'King'}; function say(greeting) { console.log(greeting + ' ' + this.firstName + ' ' + this.lastName); } say.call(person1, 'Hello'); // Hello Jon Kuperman say.call(person2, 'Hello'); // Hello Kelly King 

Taikyti

 var person1 = {firstName: 'Jon', lastName: 'Kuperman'}; var person2 = {firstName: 'Kelly', lastName: 'King'}; function say(greeting) { console.log(greeting + ' ' + this.firstName + ' ' + this.lastName); } say.apply(person1, ['Hello']); // Hello Jon Kuperman say.apply(person2, ['Hello']); // Hello Kelly King 

Susegti

 var person1 = {firstName: 'Jon', lastName: 'Kuperman'}; var person2 = {firstName: 'Kelly', lastName: 'King'}; function say() { console.log('Hello ' + this.firstName + ' ' + this.lastName); } var sayHelloJon = say.bind(person1); var sayHelloKelly = say.bind(person2); sayHelloJon(); // Hello Jon Kuperman sayHelloKelly(); // Hello Kelly King 

Kada naudoti kiekvieną

Iššūkis ir taikymas yra gana pakeisti. Tiesiog nuspręskite, ar lengviau jį siųsti į masyvą ar atskirtą argumentų sąrašą.

Aš visada prisimenu, kas prisimena, kad skambutis skirtas kableliui (suskirstytasis sąrašas), o Taikyti - masyvui.

Įrišimas yra šiek tiek kitoks. Ji grąžina naują funkciją. Skambinimas ir Taikymas nedelsdami atlieka dabartinę funkciją.

Snap yra puikus dalykas daugeliui dalykų. Mes galime jį naudoti funkcijoms, panašioms į pirmiau nurodytas funkcijas. Galime atlikti paprastą „hello“ funkciją ir paversti jį „helloJon“ arba „helloKelly“. Taip pat galime jį naudoti tokiems įvykiams kaip onClick, kur mes nežinome, kada jie bus atleisti, bet mes žinome, kokiame kontekste mes norime turėti.

Nuoroda: codeplanet.io

106
12 окт. Atsakyti Amit Shah Oct 12 2017-10-12 05:47 '17 at 5:47 2017-10-12 05:47

Tai leidžia nustatyti šios vertės vertę neatsižvelgiant į tai, kaip funkcija vadinama. Tai labai naudinga, kai kalbama apie atšaukimus:

  function sayHello(){ alert(this.message); } var obj = { message : "hello" }; setTimeout(sayHello.bind(obj), 1000); 

Norėdami pasiekti tą patį rezultatą, naudojant call atrodys toks:

  function sayHello(){ alert(this.message); } var obj = { message : "hello" }; setTimeout(function(){sayHello.call(obj)}, 1000); 
50
17 марта '13 в 0:45 2013-03-17 00:45 atsakymą pateikė jantimon kovo 17 d. 13 val. 0:45 2013-03-17 00:45

Tarkime, kad multiplication funkcija

 function multiplication(a,b){ console.log(a*b); } 

Leidžia sukurti kai kurias standartines funkcijas, kurios yra bind

var multiby2 = multiplication.bind(this,2);

Dabar multiby2 (b) yra lygus dauginimui (2, b);

 multiby2(3); //6 multiby2(4); //8 

Ką daryti, jei prisiimsiu abu parametrus

 var getSixAlways = multiplication.bind(this,3,2); 

Dabar getSixAlways () yra lygus dauginimui (3,2);

 getSixAlways();//6 

netgi praeinant grąžinimo parametrus 6; getSixAlways(12); //6

 var magicMultiplication = multiplication.bind(this); 

Sukurkite naują dauginimo funkciją ir priskirkite ją magicMultiplication.

Ne, mes paslėpiame daugybos funkciją magicMultiplication.

skambinti magicMultiplication grąžina tuščią function b()

kai jis vykdomas, jis veikia puikiai magicMultiplication(6,5); //30 magicMultiplication(6,5); //30

Kaip apie skambinti ir kreiptis?

magicMultiplication.call(this,3,2); //6

magicMultiplication.apply(this,[5,2]); //10

Paprastais žodžiais tariant, bind sukuria funkciją, call ir apply funkciją, o apply tikisi parametrų masyvo.

40
10 июня '15 в 21:04 2015-06-10 21:04 atsakymas pateikiamas tk120404 birželio 10 d. 15 val. 21:04 2015-06-10 21:04

Tiek „ Function.prototype.call() tiek „ Function.prototype.apply() vadina funkciją, kurios vertė yra nurodyta, ir grąžina šios funkcijos grąžinimo vertę.

Function.prototype.bind() , kita vertus, sukuria naują funkciją, kurioje yra nurodyta vertė, ir grąžina šią funkciją be jos vykdymo.

Taigi, atlikite šią funkciją:

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

Dabar pasiimkite tokį objektą:

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

Mes galime priskirti savo funkciją prie mūsų objekto taip:

 Obj.log = logProp.bind(Obj); 

Dabar mes galime paleisti „ Obj.log bet kurioje kodo vietoje:

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

Jei tai tikrai įdomu, tai yra tada, kai jūs ne tik susiejate šios vertės vertę, bet ir prop argumentą:

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

Dabar mes galime tai padaryti:

 Obj.logX(); // Output : 5 Obj.logY(); // Output : 10 
28
18 янв. John Slegers atsakymas Jan 18 2016-01-18 06:59 '16 at 6:59 2016-01-18 06:59

susieti : ji susieja funkciją su suteikta verte ir kontekstu, bet nevykdo šios funkcijos. Norint atlikti funkciją, turite skambinti funkcijai.

skambutis : jis atlieka funkciją su pateiktu kontekstu ir parametru.

taikoma : ji atlieka funkciją su pateiktu kontekstu ir kaip masyvu .

18
22 нояб. atsakymą pateikė Siddhartha lapkričio 22 d. 2017-11-22 20:31 '17, 8:31 pm 2017-11-22 20:31

Čia yra vienas geras straipsnis, skirtas iliustruoti skirtumą tarp bind() , apply() ir call() , apibendrinkite, kaip parodyta žemiau.

  • bind() leidžia mums lengvai nustatyti, kuris konkretus objektas bus susijęs su tuo, kai skambinate funkcijai ar metodui.

     // This data variable is a global variable​ var data = [ {name:"Samantha", age:12}, {name:"Alexis", age:14} ] var user = { // local data variable​ data :[ {name:"T. Woods", age:37}, {name:"P. Mickelson", age:43} ], showData:function (event) { var randomNum = ((Math.random () * 2 | 0) + 1) - 1; // random number between 0 and 1​ console.log (this.data[randomNum].name + " " + this.data[randomNum].age); } } // Assign the showData method of the user object to a variable​ var showDataVar = user.showData; showDataVar (); // Samantha 12 (from the global data array, not from the local data array)​  // Bind the showData method to the user object​ var showDataVar = user.showData.bind (user); // Now the we get the value from the user object because the this keyword is bound to the user object​ showDataVar (); // P. Mickelson 43​ 
  • bind() leidžia mums imtis metodų

     // Here we have a cars object that does not have a method to print its data to the console​ var cars = { data:[ {name:"Honda Accord", age:14}, {name:"Tesla Model S", age:2} ] } // We can borrow the showData () method from the user object we defined in the last example.​ // Here we bind the user.showData method to the cars object we just created.​ cars.showData = user.showData.bind (cars); cars.showData (); // Honda Accord 14​ 

    Viena problema, susijusi su šiuo pavyzdžiu, yra tai, kad į cars objektą įtraukiame naują „ showData metodą ir galbūt nenorime to padaryti, kad pasiskolintume metodą, nes automobilių objektas gali turėti nuosavybės ar showData metodo pavadinimą. Nenorime perrašyti jos atsitiktinai. Kaip matysime toliau pateikiamoje diskusijoje „ Apply ir Call , geriausia skolintis metodą taikant „ Apply arba „ Call metodą.

  • bind() leidžia mums atlikti funkciją

    Currying funkcija , taip pat žinoma kaip dalinės funkcijos taikymas, yra funkcijos naudojimas (kuris užima vieną ar daugiau argumentų), kuris grąžina naują funkciją su kai kuriais jau nustatytais argumentais.

     function greet (gender, age, name) { // if a male, use Mr., else use Ms.​ var salutation = gender === "male" ? "Mr. " : "Ms. "; if (age > 25) { return "Hello, " + salutation + name + "."; }else { return "Hey, " + name + "."; } } 

    Šį greet funkciją galime naudoti „ bind() .

     // So we are passing null because we are not using the "this" keyword in our greet function. var greetAnAdultMale = greet.bind (null, "male", 45); greetAnAdultMale ("John Hartlove"); // "Hello, Mr. John Hartlove." var greetAYoungster = greet.bind (null, "", 16); greetAYoungster ("Alex"); // "Hey, Alex."​ greetAYoungster ("Emma Waterloo"); // "Hey, Emma Waterloo." 
  • apply() arba call() kad nustatytumėte šią vertę

    Apply , Call ir bind metodai naudojami norint nustatyti šią vertę, kai skambinate metodu, ir jie tai daro šiek tiek skirtingais būdais, kad būtų galima tiesiogiai valdyti ir universalumą naudoti mūsų „JavaScript“ kode.

    apply () šią vertę, „ Apply ir „ Call metodai yra beveik identiški, išskyrus tai, kad perduodate funkcijų parametrus, apply () kaip masyvą, o jūs turite atskirai išvardyti parametrus, kuriuos norite perduoti call () metodui.

    Čia pateikiamas pavyzdys, kaip naudoti „ Call arba „ Apply kad nustatytumėte tai atgalinio ryšio funkcija.

     // Define an object with some properties and a method​ // We will later pass the method as a callback function to another function​ var clientData = { id: 094545, fullName: "Not Set", // setUserName is a method on the clientData object​ setUserName: function (firstName, lastName) { // this refers to the fullName property in this object​ this.fullName = firstName + " " + lastName; } }; function getUserInput (firstName, lastName, callback, callbackObj) { // The use of the Apply method below will set the "this" value to callbackObj​ callback.apply (callbackObj, [firstName, lastName]); } // The clientData object will be used by the Apply method to set the "this" value​ getUserInput ("Barack", "Obama", clientData.setUserName, clientData); // the fullName property on the clientData was correctly set​ console.log (clientData.fullName); // Barack Obama 
  • Pasiskolinkite funkcijas naudojant „ Apply arba „ Call

    • Naudokite matricos metodus

      Leidžia sukurti array-like objektą ir pasiskolinti kai kuriuos masyvo metodus, kad galėtumėte dirbti su mūsų objektu, pvz., Masyvu.

       // An array-like object: note the non-negative integers used as keys​ var anArrayLikeObj = {0:"Martin", 1:78, 2:67, 3:["Letta", "Marieta", "Pauline"], length:4 }; // Make a quick copy and save the results in a real array: // First parameter sets the "this" value​ var newArray = Array.prototype.slice.call (anArrayLikeObj, 0); console.log (newArray); // ["Martin", 78, 67, Array[3]]​ // Search for "Martin" in the array-like object​ console.log (Array.prototype.indexOf.call (anArrayLikeObj, "Martin") === -1 ? false : true); // true​ 

      Kitas dažnas atvejis yra konvertuoti arguments į masyvą taip.

        // We do not define the function with any parameters, yet we can get all the arguments passed to it​ function doSomething () { var args = Array.prototype.slice.call (arguments); console.log (args); } doSomething ("Water", "Salt", "Glue"); // ["Water", "Salt", "Glue"] 
    • Skolinti kitus metodus

       var gameController = { scores :[20, 34, 55, 46, 77], avgScore:null, players :[ {name:"Tommy", playerID:987, age:23}, {name:"Pau", playerID:87, age:33} ] } var appController = { scores :[900, 845, 809, 950], avgScore:null, avg :function () { var sumOfScores = this.scores.reduce (function (prev, cur, index, array) { return prev + cur; }); this.avgScore = sumOfScores / this.scores.length; } } // Note that we are using the apply () method, so the 2nd argument has to be an array​ appController.avg.apply (gameController); console.log (gameController.avgScore); // 46.4​ // appController.avgScore is still null; it was not updated, only gameController.avgScore was updated​ console.log (appController.avgScore); // null​ 
  • Naudokite taikymą apply() kad vykdytumėte arity kintamąją funkciją.

Math.max yra vienas iš kintamo Math.max funkcijos pavyzdžių,

 // We can pass any number of arguments to the Math.max () method​ console.log (Math.max (23, 11, 34, 56)); // 56 

Bet kas, jei turime skaičių numerių, kad galėtumėte eiti į Math.max ? Negalime to padaryti:

 var allNumbers = [23, 11, 34, 56]; // We cannot pass an array of numbers to the the Math.max method like this​ console.log (Math.max (allNumbers)); // NaN 

Čia apply () metodas padeda atlikti variacijos funkcijas. Vietoj pirmiau nurodytų dalykų privalome perduoti numerių masyvą, naudodami apply ( ), tokiu būdu:

 var allNumbers = [23, 11, 34, 56]; // Using the apply () method, we can pass the array of numbers: console.log (Math.max.apply (null, allNumbers)); // 56 
16
08 апр. atsakymas pateikiamas zangw 08 Apr 2016-04-08 09:45 '16 at 9:45 AM 2016-04-08 09:45

Skambutis / programa nedelsiant atlieka funkciją:

 func.call(context, arguments); func.apply(context, [argument1,argument2,..]); 

įrišimas neatlieka funkcijos nedelsiant, bet grąžina taikomą funkciją (vėlesniam vykdymui):

 function bind(func, context) { return function() { return func.apply(context, arguments); }; } 
7
07 февр. Atsakymą pateikė Eldiyar Talantbek 07 vasaris. 2017-02-07 22:34 '17, 10:34 pm 2017-02-07 22:34
  • Ryšys skambina funkcijai ir leidžia jums perduoti argumentus po vieną.
  • Taikykite skambučius funkcijai ir leidžia perduoti argumentus kaip masyvą.
  • „Bind“ grąžina naują funkciją, kuri leidžia jums perduoti šį masyvą ir bet kokį skaičių argumentų.
5
01 янв. atsakymas pateikiamas Khalid Azam sausio 01 d 2017-01-01 01:01 '17 ne 1:01 2017-01-01 01:01

Taikykite ir spragtelėkite. ir kaip jie skiriasi.

Leidžia studijuoti iššūkį ir taikyti bet kurią kasdienę terminiją.

Turite tris automobilius: your_scooter , your_car and your_jet , kurie prasideda tuo pačiu mechanizmu (metodu). Sukūrėme automobile naudodami push_button_engineStart metodą.

 var your_scooter, your_car, your_jet; var automobile = { push_button_engineStart: function (runtime){ console.log(this.name + "'s" + ' engine_started, buckle up for the ride for ' + runtime + " minutes"); } } 

Leidžia suprasti, kada naudojamas ir taikomas skambutis. Tarkime, kad esate inžinierius, ir jūs turite your_scooter , your_car ir your_jet , kurie nėra su push_button_engine_start, ir norite naudoti trečiosios šalies push_button_engineStart .

Jei paleisite toliau nurodytas kodo eilutes, jie parodys klaidos pranešimą. Kodėl

 //your_scooter.push_button_engineStart(); //your_car.push_button_engineStart(); //your_jet.push_button_engineStart(); automobile.push_button_engineStart.apply(your_scooter,[20]); automobile.push_button_engineStart.call(your_jet,10); automobile.push_button_engineStart.call(your_car,40); 

Taigi, aukščiau pateiktame pavyzdyje sėkmingai suteikiamas jūsų_paskirtuvas, jūsų_kompiuteris, jūsų_jet funkcija iš automobilio objekto.

Darykime giliau, čia padalijame aukščiau nurodytą kodo eilutę. automobile.push_button_engineStart padeda mums naudoti šį metodą.

Tada mes naudojame taikomąją programą arba skambinti naudojant taškų žymėjimą. automobile.push_button_engineStart.apply()

Dabar pritaikykite ir iškvieskite du parametrus.

  • Kontekstas
  • argumentus

Taigi čia mes nustatome kontekstą paskutinėje kodo eilutėje.

automobile.push_button_engineStart.apply(your_scooter,[20])

Skirtumas tarp skambučio ir programos yra tas, kuris taiko parametrus masyvo pavidalu, o skambutis gali tiesiog paimti argumentų sąrašą, atskirtą kableliais.

Kas yra JS Bind funkcija?

Įrišimo funkcija iš esmės susieja kažko kontekstą, o paskui jį saugo kintamajame, kad jį būtų galima atlikti vėliau.

Padarykime savo ankstesnį pavyzdį dar geriau. Anksčiau mes naudojome automobilio objektui priklausantį metodą ir panaudojome jį, kad your_car, your_jet and your_scooter . Dabar įsivaizduokite, kad norime atskirti atskirą „ push_button_engineStart atskirą, kad galėtume individualiai pradėti savo automobilius bet kokiame tolesniame mūsų pageidaujamos veiklos etape.

 var scooty_engineStart = automobile.push_button_engineStart.bind(your_scooter); var car_engineStart = automobile.push_button_engineStart.bind(your_car); var jet_engineStart = automobile.push_button_engineStart.bind(your_jet); setTimeout(scooty_engineStart,5000,30); setTimeout(car_engineStart,10000,40); setTimeout(jet_engineStart,15000,5); 

vis dar nepatenkintas?

Tegul jis bus aiškus kaip ašara. Laikas eksperimentuoti. Mes sugrįšime į skambutį ir taikysime programą ir bandysime išsaugoti funkcijos vertę kaip nuorodą.

Toliau aprašytas eksperimentas negalėjo būti atliktas, nes skambutis ir programa yra skambinami iš karto, todėl niekada nepasiekiame etape saugojimo etape kintamajame, kur privalomoji funkcija vagia šou

var test_function = automobile.push_button_engineStart.apply(your_scooter);

4
27 марта '17 в 20:21 2017-03-27 20:21 atsakymą pateikė Sagar Munjal, kovo 27 d. 17, 20:21 2017-03-27 20:21
 function printBye(message1, message2){ console.log(message1 + " " + this.name + " "+ message2); } var par01 = { name:"John" }; var msgArray = ["Bye", "Never come again..."]; printBye.call(par01, "Bye", "Never come again...");//Bye John Never come again... printBye.call(par01, msgArray);//Bye,Never come again... John undefined //so call() doesn't work with array and better with comma seperated parameters //printBye.apply(par01, "Bye", "Never come again...");//Error printBye.apply(par01, msgArray);//Bye John Never come again... var func1 = printBye.bind(par01, "Bye", "Never come again..."); func1();//Bye John Never come again... var func2 = printBye.bind(par01, msgArray); func2();//Bye,Never come again... John undefined //so bind() doesn't work with array and better with comma seperated parameters 
2
16 июня '17 в 17:19 2017-06-16 17:19 Šiljo atsakymą pateikė birželio 16 d. 17 val. 17:19 2017-06-17 17:19

Prieš šį laiką sukūriau šį funkcijų objektų, funkcijų skambučių, call/apply ir bind palyginimą:

2019

06 февр. Atsakymą pateikė Felix Kling 06 vasaris. 2019-02-06 23:42 '19 , 11:42 pm 2019-02-06 23:42

Įsivaizduokite, kad nėra privalomos. Jį galite lengvai sukurti taip:

 var someFunction=... var objToBind=.... var bindHelper = function (someFunction, objToBind) { return function() { someFunction.apply( objToBind, arguments ); }; } bindHelper(arguments); 
1
20 авг. Philippe Oceangermanique atsakymas rugpjūčio 20 d 2016-08-20 13:42 '16, 13:42 pm 2016-08-20 13:42

Atsižvelgiant į įspūdingą žinių apie šių postų disciplinos žinias, taikomųjų programų ir leksinių pamatų kiekį, pastebėjau pavyzdį, kurį verta paminėti: skambučio () / bind () programa seka lygiagrečią su galutiniu efektu, priskiriant kintamąjį pradinei funkcijai, kuri aiškiai nenurodo vertės

  function A(arg){ alert(arg); } // side effects only, no return function B(arg){ return arg; } // it does return a value var checkA = A("A_alert"); // left assignment won't be performed var checkB = B("B_return"); // left assignment as expected alert(checkA) // undefined --> no value was returned alert(checkB) // B_return --> as expected *using call()* checkA = function(){ return A("A_alert"); }; // left assignment requires explicitly function checkA(); // A_alert **using bind()** checkA = A("A_alert").bind(window); // left assignment don't checkA(); // A_alert 

Funkcija „bind ()„ fasuoti “ir grąžina šią funkciją, skambutis () atlieka tik skambutį,

0
04 нояб. atsakymas pateiktas Wnog 04 Nov. 2017-11-04 19:46 '17 at 7:46 2017-11-04 19:46

Skambinimas: skambinimas skambina funkcijai ir leidžia jums perduoti argumentus po vieną.

Taikyti: Taikyti skambina funkcijai ir leidžia perduoti argumentus kaip masyvą.

„Bind“: „ Bind“ grąžina naują funkciją, kuri leidžia jums perduoti šio ir bet kokių argumentų skaičių.

Sujungimo funkcija turėtų būti naudojama, jei norime priskirti funkciją, pavyzdžiui, su konkrečiu kontekstu.

 var demo = { getValue : function(){ console.log('demo object get value function') } setValue : function(){ setTimeout(this.getValue.bind(this),1000) } } 

aukščiau pateiktame pavyzdyje, jei mes vadiname demo.setValue () funkciją ir tiesiogiai perduodame šią.getValue funkciją, ji tiesiogiai neskambina demo.setValue funkciją, nes ji setTimeout reiškia >