鍍金池/ 問(wèn)答/Java  HTML/ js中call的詳細(xì)介紹,這代碼塊是什么意思

js中call的詳細(xì)介紹,這代碼塊是什么意思

<script type="text/javascript">
    function Animal() {
        this.name = "Animal";
        this.Say = function () {
            console.log(this);
            console.log(this.name);
        }
    }
    function Cat() {
        this.name = "Cat";
    }
    var animal = new Animal();
    var cat = new Cat();
    //animal.Say();
    animal.Say.call(cat);
  • 是不是 .調(diào)用animal.Say里面的this已經(jīng)切換到指向cat對(duì)象,所以console.log(this);
  • 打印了cat
  • console.log(this.name); 打印了cat

這個(gè)call好懵逼呀,到底是什么東西..我實(shí)在搞不懂能不能來(lái)個(gè)例子 或者給我解釋一下 , ,謝謝了

回答
編輯回答
櫻花霓

call是用于函數(shù)指定作用域的方法。call在Function的原型鏈上Function.prototype.call。

call的第一個(gè)參數(shù)就是this的指向,null/undefined或者不傳,this默認(rèn)指向window。

你傳了cat,那么this就會(huì)指向cat(object)。你還可以帶參數(shù)

function animal(leg, name) {}

animal.call(cat, 2, '小貓');

類(lèi)似的還有apply,區(qū)別就是apply的參數(shù)用數(shù)組傳進(jìn)去

animal.apply(cat, [2, '小貓']);

關(guān)于作用域的綁定,還可以了解es5新出的bind方法,

2017年9月30日 23:33
編輯回答
夏夕

cat 繼承了Animal 的屬性和方法。
借助了Animal的構(gòu)造函數(shù)完成了初始化屬性和方法的目的

代碼可以修改一下

function Cat() {
    Animal.apply(this,arguments);
    this.name = "Cat";
}

這樣所有的 Cat 實(shí)例化的對(duì)象都會(huì)繼承 Animal。

2018年3月9日 04:43
編輯回答
絯孑氣

可參考:https://segmentfault.com/a/11...
就想象成把函數(shù)執(zhí)行時(shí)的this改成傳進(jìn)去的對(duì)象,簡(jiǎn)單的理解就可以了

2017年3月7日 02:12
編輯回答
互擼娃

記得吳秀波主演的虎嘯龍吟里有個(gè)橋段,陳群想要推行《九品中正制》,但是沒(méi)有魄力,怕?lián)?zé),于是找到司馬懿,說(shuō)哎兄弟,你(this)幫我執(zhí)行吧,責(zé)任也你背行不行?司馬懿:行。
換成代碼便是這樣的:
陳群.Say.call(司馬懿)
雖然說(shuō)Say的主體是陳群,但是責(zé)任(this)則換成了司馬懿,在Say里面調(diào)用this的話(huà),便是司馬懿

2018年3月20日 15:58