国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript關于this 以及this的顯示設置(apply、call、bind)

LiveVideoStack / 1103人閱讀

摘要:如果連續(xù)呢結果會是什么結果還是第一個原因是,在中,多次是無效的。更深層次的原因,的實現(xiàn),相當于使用函數(shù)在內部包了一個,第二次相當于再包住第一次故第二次以后的是無法生效的。

this

1.其實js中的this沒那么難理解,當找不到this時記住一句話:
誰調我,我就指誰!new 誰指誰

</>復制代碼

  1. function text1(){
  2. console.log(this); //window因為是window調我了
  3. }
  4. var text2={
  5. one:function(){
  6. console.log(this); //指text因為text調我,我就指它!
  7. }
  8. }
  9. function text3(){
  10. this.x=this;
  11. }
  12. var t=new text3();
  13. t.x; //指text3 new 誰指誰
apply、call

2.apply和call兩個方法的作用都是改變this的指向
來個栗子:

</>復制代碼

  1. function food(){}
  2. food.prototype={
  3. color:"red",
  4. name:"apple",
  5. sayName:function(){
  6. console.log("my name is "+this.name);
  7. }
  8. }
  9. var text1=new food();
  10. text1.sayName();//my name is apple
  11. var banana={
  12. name:"banana"
  13. }
  14. var pear={
  15. name:"pear"
  16. }
  17. text1.sayName.apply(banana); //my name is banana
  18. text1.sayName.call(pear); //my name is pear

apply與call的作用完全一樣就是接收參數(shù)的方式不同列如:

</>復制代碼

  1. var fn=function(arg1,arg2){}
  2. apply(fn,[arg1,arg2]);
  3. call(fn,arg1,arg2);

那么當參數(shù),數(shù)量固定的時候用call不固定時用apply
這里特別說下函數(shù)內的arguments對象他是一個偽數(shù)組不能直接使用push等方法
下面寫幾個栗子展示下他兩的實際用法:

</>復制代碼

  1. //第一個栗子追加數(shù)組
  2. var array1=[1,2,3,4,5];
  3. var array2=[6,7,8,9,10];
  4. Array.prototype.push.apply(array1,array2);
  5. array1; //[1,2,3,4,5,6,7,8,9,10]

</>復制代碼

  1. //第二個栗子求number的最大值
  2. var numbers=[1,10,33,100,-55,423];
  3. Math.max.apply(Math,numbers);
  4. Math.max.call(Math,1,10,33,100,-55,423);

</>復制代碼

  1. //來個經常用到的代理console.log方法
  2. function log(msg){
  3. console.log(msg);
  4. }
  5. //上面是常用的寫法,但這樣 我傳的值是 log(1) 沒毛病 如果是log(1,2,3)呢?那就有毛病了
  6. //他不管后面?zhèn)鞫嗌賲?shù)都會被舍棄掉只會打印1
  7. //改進版本
  8. function log(){
  9. console.log.apply(console,arguments);
  10. }
  11. //這樣不管傳多少個參數(shù)都能打印出來了
bind

bind() 方法與 apply 和 call 很相似,也是可以改變函數(shù)體內 this 的指向。

概念是:bind()方法會創(chuàng)建一個新函數(shù),稱為綁定函數(shù),當調用這個綁定函數(shù)時,綁定函數(shù)會以創(chuàng)建它時傳入 bind()方法的第一個參數(shù)作為 this,傳入 bind() 方法的第二個以及以后的參數(shù)加上綁定函數(shù)運行時本身的參數(shù)按照順序作為原函數(shù)的參數(shù)來調用原函數(shù)。

</>復制代碼

  1. var say=function(){
  2. console.log(this.x)
  3. }
  4. var one={
  5. x:1
  6. }
  7. var two={
  8. x:2
  9. }
  10. var three={
  11. y:3
  12. }
  13. var fn=say.bind(one);
  14. fn()//1
  15. var fn2=say.bind(two).bind(one).bind(three);//如果連續(xù)bind呢?結果會是什么?
  16. fn2();//結果還是第一個bind

原因是,在Javascript中,多次 bind() 是無效的。更深層次的原因, bind() 的實現(xiàn),相當于使用函數(shù)在內部包了一個 call / apply ,第二次 bind() 相當于再包住第一次 bind() ,故第二次以后的 bind 是無法生效的。
那么call、apply、bind三者之間的區(qū)別和應用場景是什么呢?

</>復制代碼

  1. var obj={
  2. x:81
  3. }
  4. var text={
  5. fn:function(){
  6. return this.x;
  7. }
  8. }
  9. console.log(text.fn.call(obj));//81
  10. console.log(text.fn.apply(obj));//81
  11. console.log(text.fn.bind(obj)());//81

結果都是81,但注意的是bind()后面多了對調用的括號。
那么總結一下:

apply 、 call 、bind 三者都是用來改變函數(shù)的this對象的指向的;

apply 、 call 、bind 三者第一個參數(shù)都是this要指向的對象,也就是想指定的上下文;

apply 、 call 、bind 三者都可以利用后續(xù)參數(shù)傳參;

bind 是返回對應函數(shù),便于稍后調用;apply 、call 則是立即調用 。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86574.html

相關文章

  • 關于Javascriptapplycallbind方法說明

    摘要:需要注意的是,指定的值并不一定是該函數(shù)執(zhí)行時真正的值,如果這個函數(shù)處于非嚴格模式下,則指定為或時會自動指向全局對象瀏覽器中就是對象,同時值為原始值數(shù)字,字符串,布爾值的會指向該原始值的自動包裝對象。 JavaScript函數(shù)存在「定義時上下文」和「運行時上下文」以及「上下文是可以改變的」這樣的概念 apply和call函數(shù) call() 和 apply()都是為了改變某個函數(shù)運行時的...

    mrcode 評論0 收藏0
  • JavaScript初學者必看“this

    摘要:因為關鍵字沒有處于一個聲明的對象內部,默認指向全局對象。這一點可能對于大部分初學者來說有點難以理解。函數(shù)會返回一個函數(shù),并且將綁定好。自從年雙十一正式上線,累計處理了億錯誤事件,得到了金山軟件百姓網等眾多知名用戶的認可。 譯者按: JavaScript的this和Java等面向對象語言中的this大不一樣,bind()、call()和apply()函數(shù)更是將this的靈活度進一步延伸。...

    BlackMass 評論0 收藏0
  • Javascriptcall(),apply()和bind()

    摘要:在面向對象的中,我們了解到在中,一切都是對象。到目前為止,我們已將函數(shù)視為由名稱可選,也可以是匿名函數(shù)組成的對象及其在調用時執(zhí)行的代碼。這意味著,我們可以調用任何函數(shù),并在調用函數(shù)中明確指定。和用于完全相同的目的。 What s this 在面向對象的JS中,我們了解到在JS中,一切都是對象。因為一切都是對象,我們開始明白我們可以為函數(shù)設置和訪問其他屬性。而this提供了一種更優(yōu)雅的方...

    WrBug 評論0 收藏0
  • Javascriptcall(),apply()和bind()

    摘要:在面向對象的中,我們了解到在中,一切都是對象。到目前為止,我們已將函數(shù)視為由名稱可選,也可以是匿名函數(shù)組成的對象及其在調用時執(zhí)行的代碼。這意味著,我們可以調用任何函數(shù),并在調用函數(shù)中明確指定。和用于完全相同的目的。 What s this 在面向對象的JS中,我們了解到在JS中,一切都是對象。因為一切都是對象,我們開始明白我們可以為函數(shù)設置和訪問其他屬性。而this提供了一種更優(yōu)雅的方...

    Sike 評論0 收藏0
  • Javascriptcall(),apply()和bind()

    摘要:在面向對象的中,我們了解到在中,一切都是對象。到目前為止,我們已將函數(shù)視為由名稱可選,也可以是匿名函數(shù)組成的對象及其在調用時執(zhí)行的代碼。這意味著,我們可以調用任何函數(shù),并在調用函數(shù)中明確指定。和用于完全相同的目的。 What s this 在面向對象的JS中,我們了解到在JS中,一切都是對象。因為一切都是對象,我們開始明白我們可以為函數(shù)設置和訪問其他屬性。而this提供了一種更優(yōu)雅的方...

    sarva 評論0 收藏0

發(fā)表評論

0條評論

LiveVideoStack

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<