JS中的call apply bind方法

2021-09-11 09:39:41 字數 2972 閱讀 7575

一、call

call()

語法:

call([thisobj[,arg1[, arg2[, [,.argn]]]]])複製**
定義:呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。

說明:call方法可以用來代替另乙個物件呼叫乙個方法。

call方法可將乙個函式的物件上下文從初始的上下文改變為由 thisobj 指定的新物件。

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

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

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

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

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

function

a()

function

b(){}

var c=; //定義物件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

複製**

如果你不理解上面的,沒關係,我們再來看乙個例子:

function

class1()

}

function

class2()

var f=new class2();

f.name(); //呼叫的是class1內的方法,將class1的name方法交給class2使用

複製**

常用例子:

(1)

function

eat(x,y)

function

drink(x,y)

eat.call(drink,3,2);

輸出:5

複製**

這個例子中的意思就是用 eat 來替換 drink,eat.call(drink,3,2) == eat(3,2) ,所以執行結果為:console.log(5);

注意:js 中的函式其實是物件,函式名是對 function 物件的引用。

(2)

function

animal()

}

function

dog()

var animal=new animal();

var dog=new dog();

animal.showname.call(dog);

輸出:dog複製**

在上面的**中,我們可以看到dog裡並沒有showname方法,那為什麼(this.name)的值是dog呢?

關鍵就在於最後一段**(animal.showname.call(dog)),意思是把animal的方法放到dog上執行,也可以說,把animal 的showname()方法放到 dog上來執行,所以this.name 應該是 dog。

(3)繼承

function

animal(name)

}

function

dog(name)

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

dog.showname();

輸出:crazy dog複製**

animal.call(this) 的意思就是使用 animal物件代替this物件,那麼dog就能直接呼叫animal的所有屬性和方法。

定義:應用某一物件的乙個方法,用另乙個物件替換當前物件。

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

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

function

class1(args1,args2)

}

function

class2()

var c=new class2();

c.name();

輸出:1

2複製**

既然兩者功能一樣,那該用哪個呢?

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

注意:bind方法的返回值是函式

var bar=function()

var foo=

bar();

bar.bind(foo)();

/*或*/

var func=bar.bind(foo);

func();

輸出:undefined

3複製**

JS 理解JS中的物件

物件是object資料型別的值 物件是一組沒有特定順序的值 其中每個值都有乙個名字,從而,物件看起來就像是一組名值對。建立並定義物件的方法 1.var person new object person.name carolina person.age 29 person.job dream pers...

js中的函式

1 js中的string物件 1 內建的 2 屬性 length 3 方法 indexof 查詢子字串 匹配字串 查詢到了,返回 字串 出現的位置 沒有找到 返回 1 charat 返回指定位置的字串 substr 字串的擷取,可加兩個引數,形如 2,2 第二個位置 長度 也可以是乙個引數,則表示從...

js中with的用法

with語句用於設定 在特定物件中的作用域。它的語法 with expression statement 例如 var smessage hello with smessage alert touppercase 輸出 hello 在這個例子中,with語句用於字串,所以在呼叫touppercase...