技術頻道導航
HTML/CSS
.NET技術
IIS技術
PHP技術
Js/JQuery
Photoshop
Fireworks
服務器技術
操作系統(tǒng)
網站運營
卡卡网是专业的网站测速平台,网速测试,测试网站速度,就来卡卡网 ~
问题反馈网络日志

DiyVM:香港VPS驚爆價36元一月
★站長/主播變現(xiàn)★有流量就來
5M CN2 GIA云主機 24元起
一一一云主機 26元起一一一
官方高價收量,每日穩(wěn)定結算

一一云主機 24元 3折起一一
海外CN2云 低至$2.5/月
海外云低至2折 298/年
免費測試★APK免殺 谷歌過保護
官方收量CPA/CPS長期穩(wěn)定

海外主機 5M CN2 低至$2/月
恒創(chuàng)科技 一 海外服務器 ● 高速穩(wěn)定
★解決安裝報毒★谷歌過保護機制
超級簽★免殺★加固★滿意付款
全球云主機 3天試用再買

【菠蘿云】香港4G內存99元,馬上開通
億人互聯(lián)-津/京BGP托管租用/VPS
蘋果簽名/APP封裝/遠控免殺
10M CN2海外云VPS 53元/月
CN2 GIA/1000Mbps $111/月

實力產品變現(xiàn)
實力產品變現(xiàn)
實力產品變現(xiàn)
實力產品變現(xiàn)
實力產品變現(xiàn)

贊助商

分類目錄

贊助商

最新文章

本文介绍我们要用jQuery操作HTML,移除某class的div标签,但保留内...
在书写正则表达式时,* + ? 符号非常常见,但是它们又比较容易混淆。本文将用一...
本文我将给大家介绍如何用JS+CSS来实现可移动显示的图片背景效果。 
在一些商品展示的网页里,我们经常看到图片放大的效果。本文就给大家介绍一下,如何用...
本文介绍如何分别使用JS和jQuery两种方法来实现点击按钮复制文字到剪贴板,只...
本文介绍如何使用jquery-resizable调整表格(table)列宽。
本文介绍如何使用jquery-resizable插件调整左右/上下窗格大小。

搜索

5示例演示jQuery .call 和 .apply 的使用區(qū)別

作者:admin    時間:2022-7-28 9:27:17    瀏覽:

在上一文《了解 .apply 和 .call 的區(qū)別》中,我們介紹了 .call.apply 的有關知識,介紹了它們時如何工作的,并通過多個實例介紹了它們的區(qū)別。在本文中,將再通過多個示例,演示  .call.apply 的使用區(qū)別。

語句

我們先看看  .call.apply 的語句。

  1. .apply(this, [...])
  1. .call(this, param1, param2, param3, param4...)

可以看到,.apply 接受一個參數(shù)數(shù)組,而 .call 接受零個或多個單獨的參數(shù)。這是它們的句式區(qū)別。

apply() 方法與 call() 相同,只是 apply() 需要一個數(shù)組作為第二個參數(shù),該數(shù)組表示目標方法的參數(shù)。

所以:

  1. // 假設你有一個函數(shù) f
  2. function f(message) { ... }
  3. f.call(receiver, "test");
  4. f.apply(receiver, ["test"]);

.call 可不需要第一個參數(shù),但 .apply 第一個參數(shù)不可缺少。

示例一

這些方法對于賦予對象臨時功能非常有用。

  1. var friend = {
  2.     car: false,
  3.     lendCar: function ( canLend ){
  4.       this.car = canLend;
  5.  }
  6.  
  7. }; 
  8.  
  9. var me = {
  10.     car: false,
  11.     gotCar: function(){
  12.       return this.car === true;
  13.   }
  14. };
  15.  
  16. console.log(me.gotCar()); // false
  17.  
  18. friend.lendCar.call(me, true); 
  19.  
  20. console.log(me.gotCar()); // true
  21.  
  22. friend.lendCar.apply(me, [false]);
  23.  
  24. console.log(me.gotCar()); // false

示例二

  1. function Person(name) {
  2.     this.name = name; 
  3. }
  4. Person.prototype.getName = function(a,b) { 
  5.      return this.name + " " + a + " " + b; 
  6. }
  7.  
  8. var reader = new Person('John Smith');
  9.  
  10. reader.getName = function() {
  11.    // apply 和 call 執(zhí)行函數(shù)并返回值
  12.  
  13.    // 注意提取"getName"原型的不同方式
  14.    var baseName = Object.getPrototypeOf(this).getName.apply(this,["is a", "boy"]);
  15.    console.log("Apply: " + baseName);
  16.  
  17.    var baseName = Object.getPrototypeOf(reader).getName.call(this, "is a", "boy"); 
  18.    console.log("Call: " + baseName);
  19.  
  20.    // bind 返回可以調用的函數(shù)
  21.    var baseName = Person.prototype.getName.bind(this, "is a", "boy"); 
  22.    console.log("Bind: " + baseName());
  23. }
  24.  
  25. reader.getName();
  26. /* Output
  27. Apply: John Smith is a boy
  28. Call: John Smith is a boy
  29. Bind: John Smith is a boy
  30. */
x

示例三

  1. var obj1 = { which : "obj1" },
  2. obj2 = { which : "obj2" };
  3.  
  4. function execute(arg1, arg2){
  5.     console.log(this.which, arg1, arg2);
  6. }
  7.  
  8. //使用 call
  9. execute.call(obj1, "dan", "stanhope");
  10. //output: obj1 dan stanhope
  11.  
  12. //使用 apply
  13. execute.apply(obj2, ["dan", "stanhope"]);
  14. //output: obj2 dan stanhope

示例四

  1. let obj = {
  2.   val1: 5,
  3.   val2: 10
  4. }
  5.  
  6. const summation = function (val3, val4) {
  7.   return  this.val1 + this.val2 + val3 + val4;
  8. }
  9.  
  10. console.log(summation.apply(obj, [2 ,3])); //20
  11. // 首先,我們在第一個 arg 中分配 this 的值
  12. // 使用 apply 必須通過數(shù)組傳遞
  13.  
  14. console.log(summation.call(obj, 2, 3)); //20
  15. // 使用 call 我們可以獨立地通過每個參數(shù)傳遞

實例五

  1. var car  = {  
  2.   name: "Reno",
  3.   country: "France",
  4.   showBuyer: function(firstName, lastName) {
  5.     console.log(`${firstName} ${lastName} just bought a ${this.name} from ${this.country}`);
  6.   }
  7. }
  8.  
  9. const firstName = "Bryan";
  10. const lastName = "Smith";
  11.  
  12. car.showBuyer(firstName, lastName);  // Bryan just bought a Reno from France
  13.  
  14. const obj = { name: "Maserati", country: "Italy" };
  15.  
  16. car.showBuyer.call(obj, firstName, lastName); // Bryan Smith just bought a Maserati from Italy
  17.  
  18. car.showBuyer.apply(obj, [firstName, lastName]); // Bryan Smith just bought a Maserati from Italy

總結

本文通過5個示例,演示了jQuery .call 和 .apply 的使用區(qū)別。

相關文章

標簽: call方法  apply方法  
x
廣告: 【限時】云主機 24元/月