摘要:其實它們都很簡單,但是在處理一些與相關的函數的時候,用來改變函數中的指向,卻是必不可少的工具,所以必須掌握好它們的用法。
關于javascript中的bind、call、apply等函數的用法
? ? ? ? 前面的文章已經說到this的指向了,那么這篇文章就要說一說和this相關的三個函數的用法:bind( )、call( )和apply( )。
? ? ? ? 其實它們都很簡單,但是在處理一些與this相關的函數的時候,用來改變函數中this的指向,卻是必不可少的工具,所以必須掌握好它們的用法。
? ? ? ? 好了,三管齊下,一起比較地舉例子說一下:
//先來一個對象big吧 var big = { name:"BaBa", saying:function (age){ console.log(this.name,"age:",age); } }; //再來一個small對象 var small= { name:"ErZi" }; //如果想調用big的saying方法來說出‘Erzi’: //使用bind方法 big.saying.bind(small)(20);//打印結果為ErZi age: 20 //使用call方法 big.saying.call(small,20);//打印結果為ErZi age: 20 //使用apply方法 big.saying.apply(small,[20]);//打印結果為ErZi age: 20
? ? ? ? 所以,其實三種方法都可以達到同一個結果,至于區別就很顯而易見了。
? ? ? ? bind只是單純將一個函數里的this的指向明確指定為small了,如果要執行函數,就要在后面加括號調用了。
? ? ? ? call就是直接執行一個自己指定this指向的函數,參數是一個一個傳遞。
? ? ? ? apply和call的區別就是,參數是放進一個數組中傳遞。
? ? ? ? 實際上,很多時候我們在一個函數中,想用到其他的函數,但是其他函數的this指向就不明確,所以就會在自己的函數里面通過這三個方法來調用函數,例如:
//先來一個對象big吧 var big = { name:"BaBa", age:50, saying:function (){ console.log(this.name,"age:",this.age); } }; //再來一個SayingAge的構造函數 function SayingAge(name,age){ this.name = name; this.age = age; this.saying = big.saying.bind(this); } //實例化一個對象genius var genius = new SayingAge("tiancai",18); //調用genius的saying方法 genius.saying();//打印結果為tiancai age: 18
? ? ? ? 構造函數SayingAge就是將big的saying方法拿過來,并將saying函數里面的this指向改為自己的this指向(指向實例化的對象)。
? ? ? ? 如果想不單單是bind了一個函數的this指向,還想執行它,舉個call的例子(apply只是將參數放進數組):
//先來一個對象big吧 var big = { name:"BaBa", age:50, saying:function (sex){ console.log(this.name,"age:",this.age,"sex:",sex); } }; //再來一個small對象 var small = { name:"ErZi", age:18 }; //借用big的saying方法看看small的saying是什么 big.saying.call(small,"male");//打印結果為ErZi age: 18 sex: male
? ? ? ? 當然了,這個方法并沒有給small添加了saying方法,只不過調用了big的saying方法,并將里面的this指向small而已。
? ? ? ? 相信大家對這三個方法的應用都很輕松掌握了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91402.html
摘要:如果連續呢結果會是什么結果還是第一個原因是,在中,多次是無效的。更深層次的原因,的實現,相當于使用函數在內部包了一個,第二次相當于再包住第一次故第二次以后的是無法生效的。 this 1.其實js中的this沒那么難理解,當找不到this時記住一句話:誰調我,我就指誰!new 誰指誰 function text1(){ console.log(this); //指wind...
摘要:系統,扎實的語言基礎是一個優秀的前端工程師必須具備的。第一個參數為調用函數時的指向,隨后的參數則作為函數的參數并調用,也就是。和的區別只有一個,就是它只有兩個參數,而且第二個參數為調用函數時的參數構成的數組。 系統,扎實的 javascript 語言基礎是一個優秀的前端工程師必須具備的。在看了一些關于 call,apply,bind 的文章后,我還是打算寫下這篇總結,原因其實有好幾個。...
摘要:新手經常犯的一個錯誤是將一個方法從對象中拿出來,然后再調用,希望方法中的是原來的對象。如果不做特殊處理的話,一般會丟失原來的對象。 call、apply、bind是JavaScript中Function函數自帶的方法,主要用于改變this的指向 區別: call() 1.語法: fun.call(this, arg1,arg2) 2.this取值的幾點說明: (1)處于非嚴格模式下,...
摘要:它們有明確的和成員函數的定義,只有的實例才能調用這個的成員函數。用和調用函數里用和來指定函數調用的,即指針的指向。同樣,對于一個后的函數使用或者,也無法改變它的執行,原理和上面是一樣的。 函數里的this指針 要理解call,apply和bind,那得先知道JavaScript里的this指針。JavaScript里任何函數的執行都有一個上下文(context),也就是JavaScri...
摘要:不能應用下的等方法。首先我們可以通過給目標函數指定作用域來簡單實現方法保存,即調用方法的目標函數考慮到函數柯里化的情況,我們可以構建一個更加健壯的這次的方法可以綁定對象,也支持在綁定的時候傳參。原因是,在中,多次是無效的。 bind 是返回對應函數,便于稍后調用;apply 、call 則是立即調用 。 apply、call 在 javascript 中,call 和 apply 都是...
閱讀 3349·2021-09-30 09:47
閱讀 2732·2021-08-18 10:22
閱讀 2518·2021-08-16 10:49
閱讀 2884·2019-08-30 15:53
閱讀 2732·2019-08-29 16:14
閱讀 3185·2019-08-28 18:18
閱讀 3229·2019-08-26 13:21
閱讀 787·2019-08-26 12:02