js 中call,apply,bind的區別

2022-05-24 14:21:15 字數 2092 閱讀 2040

一、call

1、   call(thisobj,x,y)

thisobj的取值有以下4種情況:

(1)不傳,或者傳null,undefined,函式中的this指向window物件;

(2)傳遞另乙個函式的函式名,函式中的this指向這個函式的引用;

(3)傳遞字串、數值或者布林型別等基礎型別,函式中的this指向其對應的包裝物件,如string、number、boolean

(4)  傳遞乙個物件,函式中的this指向這個物件

function

a()function

b(){}

var c=;

a.call();

//window

a.call(null); //window

a.call(undefined) //window

a.call(1); // number

a.call(''); // string

a.call(true) // boolean

a.call(b) // function b(){}

a.call(c) // object

2、 舉個例子:

function

animal()

}function dog()

var animal=new animal();

var dog = new dog();

animal.showname.call(dog);

返回的是dog

因為dog繼承了animal中showname 這個方法,但是this的指向還是dog,所有列印出來的是dog 中的name.

3、 call()在繼承中的運用

function

animal(name)

}function dog(name)

var dog = new dog("crazy dog");

dog.showname();

}輸出:crazy dog

傳入了name 這個引數。

如果argarray 不是乙個有效的陣列或者不是arguments物件,那麼將導致乙個typeerror。

如果沒有提供argarray 和thisobj 任何乙個引數,那麼global物件將被用作thisobj, 並且無法被傳遞任何引數。

三、bind

1、bind是在es5 中擴充套件的方法(ie6,7,8不支援)

mdn的解釋是:bind()方法會建立乙個新函式,稱為繫結函式,當呼叫這個繫結函式時,繫結函式會以建立它時傳入bind()方法的第乙個引數作為this,傳入bind()方法的第二個以及以後的引數加上繫結函式執行時本身的引數按照順序作為原函式的引數來呼叫原函式。

var bar=function

()var foo=

bar()

bar.bind(foo)();

var func=bar.bind(foo);

func()

輸出:undefined

3

2、如果連續bind()兩次,藝或者是連續bind()三次,那麼輸出的值是什麼?

var bar = function

()var foo =

var sed =

var func = bar.bind(foo).bind(sed);

func();//

var fiv =

var func = bar.bind(foo).bind(sed).bind(fiv);

func();

答案都是3。原因是,在js中,多次bind()是無效的。

var obj =

var foo =

}console.log(foo.getx.bind(obj)());

//81

console.log(foo.getx.call(obj)); //

8181

三個輸出是81,但是注意看使用bind()方法,後面多了對括號。

再總結一下:

This學習實現call apply bind

不說太多,直入主題 由淺入比淺深一點 function test str let obj 才疏學淺,歡迎補充與建議 實現步驟 只在函式上實現該功能 確定所傳物件有效 將當前函式this繫結到該物件上 執行該物件繫結的此函式 function.prototype.mycall function con...

如何模擬實現乙個call apply bind函式

call模擬實現 首先我們實現繫結this功能。比如我們有乙個foo函式 function getname 還有乙個wechat物件 const wechat 我們希望實現 getname.call wechat fedaily以wechat和getname這個為例,這裡的this即getname,...

js之旅(七)js中this

本文講述js中this的指向 介紹es5和es6中this的不同 在js es5中,使用的是function函式,誰在呼叫function,this就指向誰,有以下幾個特點 1.1 this最終指向的是呼叫它的物件 這個特點的就是es5中this的指向,其它特點都是對它的補充,如下示例 functi...