jsÖÐcallµÄÓ÷¨
call ÒªÁìÔÊÐíº¯ÊýÔÚÖ¸¶¨¹¤¾ßµÄÉÏÏÂÎÄÖÐÖ´ÐУ¬ÓÃÓÚ£º£¨1£©¸ü¸Äº¯ÊýµÄ this °ó¶¨£»£¨2£©×ª´ïÌØÊâ²ÎÊý£»£¨3£©Ä£Äâ¼ÌÐø£¬½¨ÉèÒ»¸öй¤¾ß²¢¼ÌÐøÁíÒ»¸ö¹¤¾ßµÄÊôÐÔºÍÒªÁì¡£
call ÒªÁìÔÚ JavaScript ÖеÄÓ÷¨
½ç˵£º
call ÒªÁìÔÊÐíÒ»¸öº¯ÊýÔÚÖ¸¶¨µÄ¹¤¾ß£¨thisArg£©ÉÏÏÂÎÄÖб»Å²Óã¬×ÝÈ»¸Ãº¯Êý×î³õ²»Êǰ󶨵½¸Ã¹¤¾ß¡£
Óï·¨£º
function.call(thisArg, arg1, arg2, ...)
µÇ¼ºó¸´ÖÆ
ÆäÖУº
function£ºÒªÅ²Óõĺ¯Êý¡£
thisArg£ºÖ¸¶¨º¯ÊýÖ´ÐÐʱ this Òªº¦×ÖËù°ó¶¨µÄ¹¤¾ß¡£
arg1, arg2, …£ºÒª×ª´ï¸øº¯ÊýµÄ²ÎÊý¡£
Ó÷¨£º
¸ü¸Äº¯ÊýµÄÖ´ÐÐÉÏÏÂÎÄ£º
call ÒªÁì¿ÉÒÔÓÃÀ´¸ü¸Äº¯ÊýµÄÖ´ÐÐÉÏÏÂÎÄ£¬¼´ this Òªº¦×ÖËù°ó¶¨µÄ¹¤¾ß¡£ÕâÔÚÐèÒªÔÚ²î±ð¹¤¾ß¼ä¹²ÏíÒªÁìµÄÇéÐÎϺÜÊÇÓÐÓá£
ÀýÈ磺
const person1 = { name: "John" }; const person2 = { name: "Jane" }; function greet() { console.log(`Hello, ${this.name}!`); } // ʹÓà call ¸ü¸ÄÖ´ÐÐÉÏÏÂÎÄ greet.call(person1); // Êä³ö£º"Hello, John!" greet.call(person2); // Êä³ö£º"Hello, Jane!"
µÇ¼ºó¸´ÖÆ
ת´ïÌØÊâ²ÎÊý£º
call ÒªÁ컹¿ÉÒÔÓÃÀ´×ª´ïÌØÊâ²ÎÊý¸øº¯Êý¡£ÕâÔÚÐèÒªÏòº¯Êý¶¯Ì¬×ª´ï²ÎÊýµÄÇéÐÎϺÜÊÇÓÐÓá£
ÀýÈ磺
function addNumbers(a, b) { return a + b; } // ʹÓà call ת´ïÌØÊâ²ÎÊý const result = addNumbers.call(null, 1, 2, 3); // Êä³ö£º6
µÇ¼ºó¸´ÖÆ
Ä£Äâ¼ÌÐø£º
call ÒªÁì¿ÉÒÔÓÃÀ´Ä£Äâ¼ÌÐø£¬¼´½¨ÉèÒ»¸öй¤¾ß²¢¼ÌÐøÁíÒ»¸ö¹¤¾ßµÄÊôÐÔºÍÒªÁì¡£
ÀýÈ磺
const Parent = function (name) { this.name = name; }; Parent.prototype.greet = function () { console.log(`Hello, ${this.name}!`); }; const Child = function (name) { Parent.call(this, name); // ŲÓø¸Àà½á¹¹º¯Êý }; // ¼ÌÐø¸¸ÀàÒªÁì Child.prototype = Object.create(Parent.prototype); const child = new Child("John"); child.greet(); // Êä³ö£º"Hello, John!"
µÇ¼ºó¸´ÖÆ
×¢ÖØ£º
call ÒªÁìÖ»»á¸ü¸Äº¯ÊýµÄÖ´ÐÐÉÏÏÂÎÄ£¬²»»áÓÀÊÀ°ó¶¨¸Ãº¯Êýµ½Ö¸¶¨µÄ¹¤¾ß¡£
¹ØÓÚ¼ýÍ·º¯Êý£¬call ÒªÁì²»Æð×÷Óá£
ÒÔÉϾÍÊÇjsÖÐcallµÄÓ÷¨µÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡