一、call
call有兩個主要:給函式傳遞引數;擴充函式的作用域。擴充函式作用域很重要,即改變函式的上下文(改變this的指向)。下面簡單介紹一下,**如下:
window.job = 'teacher';
showjob = () =>
showjob(); //teacher
上述**中,this指向window,即this=window物件。當然,如果在**中加入嚴格模式:
'use strict';
'use strict';
window.job = 'teacher';
function showjob()
showjob();
此時,**會報錯:「job undefined」,原因嚴格模式下,此時的this指向undefined。現在忽略這種情況,回到問題,如果不想this指向window,要怎麼改變函式中的this,看下列**:
window.job = 'teacher';
const studentobj = ;
function showjob()
showjob.call(studentobj); //student
在showjob呼叫的時候,函式後面多加乙個call,然後在引數中放入this指向的物件即可。call在呼叫時使用,也叫動態繫結。call的重要功能,通俗講就是改變this的指向。
**段1:
function sum(num1, num2)
function callsum(num1, num2)
callsum(10, 20); //30
**段2:
function sum(num1, num2)
function callsum(num1, num2)
callsum(10, 20); //30
上述兩個**段的功能一樣。
注意:此時this作為呼叫物件不能忽略,如果要使用預設物件則可以使用null作為第乙個引數。
總結:2、call的主要作用是擴充套件函式的作用域,即改變this指向。
js方法call和apply例項解析
在ecmascript v3中,給function原型定義了這兩個方法,這兩個方法的作用都是一樣的 使用這兩個方法可以像呼叫其他物件方法一樣呼叫函式,這句話是從書上抄的,至少我是沒讀明白這是什麼意思。下面說簡單易懂的,先看段 function introduce name,age var p new...
apply和call的用法
應用某一物件的乙個方法,用另乙個物件替換當前物件。引數 thisobj 可選項。將被用作當前物件的物件。argarray 可選項。將被傳遞給該函式的引數陣列。說明 如果 argarray 不是乙個有效的陣列或者不是arguments物件,那麼將導致乙個 typeerror。如果沒有提供 argarr...
call 和apply 的區別
call方法 語法 call thisobj,object 定義 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件 說明 call方法可以用來代替另乙個物件呼叫乙個方法。call方法可將乙個函式的物件上下文從初始的上下文改變為由thisobjext指定的新物件。如果沒有提供thisobj引數,那麼g...