js apply和call

apply和call

1. 每個(gè)函數(shù)都有兩個(gè)非繼承而來(lái)的方法;call和apply
2. 相同點(diǎn):設(shè)置函數(shù)體內(nèi)this的指向,以擴(kuò)展賴以運(yùn)行的作用域
 一般來(lái)說(shuō),this總是指向調(diào)用某個(gè)方法的對(duì)象,它倆都是改變this的指向。

apply的實(shí)例

apply的用法

apply方法:
語(yǔ)法:apply([thisObj[,argArray]])
定義:應(yīng)用某一對(duì)象的一個(gè)方法,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象。
說(shuō)明:
如果 argArray 不是一個(gè)有效的數(shù)組或者不是 arguments 對(duì)象,那么將導(dǎo)致一個(gè) TypeError。
如果沒(méi)有提供 argArray 和 thisObj 任何一個(gè)參數(shù),那么 Global 對(duì)象將被用作 thisObj, 并且無(wú)法被傳遞任何參數(shù)。

var obj = {
        "a":1,
        "b":2,
        show:function () {
            console.log(this.a)
        }
    }
    var obj2 = {
        "a":3
    }
    obj.show.apply(obj2);//其實(shí)相當(dāng)于obj2,繼承了obj里面的show方法,所以show里面的this指向了obj2
    obj.show.apply('');//由于‘’字符串調(diào)用obj的show方法,show里面的this指向了‘’字符串
    obj.show.apply(window);//this指向了window
    obj.show.apply(document);//window
    obj.show.apply();//默認(rèn)是指向全局的window
    obj.show.apply(undefined);//指向全局的window

call方法

call方法:
語(yǔ)法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定義:調(diào)用一個(gè)對(duì)象的一個(gè)方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象。
說(shuō)明:
call 方法可以用來(lái)代替另一個(gè)對(duì)象調(diào)用一個(gè)方法。call 方法可將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對(duì)象。
如果沒(méi)有提供 thisObj 參數(shù),那么 Global 對(duì)象被用作 thisObj。

function Animate() {
        this.name = 'abc';
        this.type =1;
        this.getName = function () {
            console.log(this.name)
            return this.name;
        }
        this.setName = function (name) {
            this.name = name;
        }
    }

    function Dog() {
        this.name = 'dog';
        Animate.call(this);//dog是動(dòng)物的子類;call和apply有繼承的特性,改變當(dāng)前對(duì)象的指向
//重寫(xiě)父類的方法
        this.getName = function () {
            console.log('&&&&&&')
            console.log(this.name)
            return this.name;
        }
        this.setName = function (name) {
            this.name = name;
        }


    }


    var dog = new  Dog();
    dog.setName('dog1');
    dog.getName();

自我基礎(chǔ)的理解,有錯(cuò)誤歡迎指正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容