成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

javascript關(guān)于this 以及this的顯示設(shè)置(apply、call、bind)

LiveVideoStack / 1145人閱讀

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

this

1.其實(shí)js中的this沒那么難理解,當(dāng)找不到this時(shí)記住一句話:
誰調(diào)我,我就指誰!new 誰指誰

function text1(){
    console.log(this);     //指window因?yàn)槭莣indow調(diào)我了
}
var text2={
    one:function(){
        console.log(this); //指text因?yàn)閠ext調(diào)我,我就指它!
    }
}

function text3(){
    this.x=this;
}
var t=new text3();
   t.x;                     //指text3 new 誰指誰
apply、call

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

function food(){}
food.prototype={
    color:"red",
    name:"apple",
    sayName:function(){
        console.log("my name is "+this.name); 
    }
}
var text1=new food();

text1.sayName();//my name is apple

var banana={
    name:"banana"
}
var pear={
    name:"pear"
}
text1.sayName.apply(banana); //my name is banana
text1.sayName.call(pear); //my name is pear

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

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

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

//第一個(gè)栗子追加數(shù)組
var array1=[1,2,3,4,5];
var array2=[6,7,8,9,10];
Array.prototype.push.apply(array1,array2);
array1; //[1,2,3,4,5,6,7,8,9,10]
//第二個(gè)栗子求number的最大值
var numbers=[1,10,33,100,-55,423];
Math.max.apply(Math,numbers);
Math.max.call(Math,1,10,33,100,-55,423);
//來個(gè)經(jīng)常用到的代理console.log方法
function log(msg){
    console.log(msg);
}
//上面是常用的寫法,但這樣 我傳的值是 log(1) 沒毛病 如果是log(1,2,3)呢?那就有毛病了
//他不管后面?zhèn)鞫嗌賲?shù)都會(huì)被舍棄掉只會(huì)打印1
//改進(jìn)版本
function log(){
    console.log.apply(console,arguments);
}
//這樣不管傳多少個(gè)參數(shù)都能打印出來了
bind

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

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

var say=function(){
    console.log(this.x)
}
var one={
    x:1
}
var two={
    x:2
}
var three={
    y:3
}
var fn=say.bind(one);
fn()//1
var fn2=say.bind(two).bind(one).bind(three);//如果連續(xù)bind呢?結(jié)果會(huì)是什么?
fn2();//結(jié)果還是第一個(gè)bind

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

var obj={
    x:81
}
var text={
    fn:function(){
       return this.x;
    }
}
console.log(text.fn.call(obj));//81
console.log(text.fn.apply(obj));//81
console.log(text.fn.bind(obj)());//81

結(jié)果都是81,但注意的是bind()后面多了對(duì)調(diào)用的括號(hào)。
那么總結(jié)一下:

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

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

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

bind 是返回對(duì)應(yīng)函數(shù),便于稍后調(diào)用;apply 、call 則是立即調(diào)用 。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/86574.html

相關(guān)文章

  • 關(guān)于Javascriptapplycall、bind方法說明

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

    mrcode 評(píng)論0 收藏0
  • JavaScript初學(xué)者必看“this

    摘要:因?yàn)殛P(guān)鍵字沒有處于一個(gè)聲明的對(duì)象內(nèi)部,默認(rèn)指向全局對(duì)象。這一點(diǎn)可能對(duì)于大部分初學(xué)者來說有點(diǎn)難以理解。函數(shù)會(huì)返回一個(gè)函數(shù),并且將綁定好。自從年雙十一正式上線,累計(jì)處理了億錯(cuò)誤事件,得到了金山軟件百姓網(wǎng)等眾多知名用戶的認(rèn)可。 譯者按: JavaScript的this和Java等面向?qū)ο笳Z言中的this大不一樣,bind()、call()和apply()函數(shù)更是將this的靈活度進(jìn)一步延伸。...

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

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

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

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

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

    摘要:在面向?qū)ο蟮闹校覀兞私獾皆谥?,一切都是?duì)象。到目前為止,我們已將函數(shù)視為由名稱可選,也可以是匿名函數(shù)組成的對(duì)象及其在調(diào)用時(shí)執(zhí)行的代碼。這意味著,我們可以調(diào)用任何函數(shù),并在調(diào)用函數(shù)中明確指定。和用于完全相同的目的。 What s this 在面向?qū)ο蟮腏S中,我們了解到在JS中,一切都是對(duì)象。因?yàn)橐磺卸际菍?duì)象,我們開始明白我們可以為函數(shù)設(shè)置和訪問其他屬性。而this提供了一種更優(yōu)雅的方...

    sarva 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<