js中三個預設方法call,applay,bind

2022-08-03 17:48:13 字數 1591 閱讀 1938

這三個都是函式自帶的方法(function.prototype),這三個方法都能夠改變函式內部 this的指向,

call

//

call方法接收三個引數,第乙個是this指向,第二個,三個是傳遞給函式的實參,可以是數字,字串,陣列等型別的資料型別都可以

function

fn(n1,n2)

fn.call();

//=>this:window;

let obj =;

fn.call(obj);

//=>this:obj;n1,n2:undefined

fn.call(1,2);//

=>this: 1;n1=2,n2=undefined;

fn.call(obj,1,2);//

=>this: obj;n1=1,n2=2;

//call方法的幾個特殊屬性

//非嚴格模式下

fn.call(undefined);//

this=>window

fn.call(null);//

this=>window

//嚴格模式下

"use strict"fn.call(undefined);

//this=>undefined

fn.call(null);//

this=>null

//

function

fn (n1,n2)

let obj =;

注意第二個引數必須是陣列,否則會報錯

bind

//

bind和call方法呼叫形式類似,但是原理完全不同

fn.call(obj,10,20);//

=>fn先執行,將fn內的this指向obj,並且把引數10,20傳遞給fn

fn.bind(obj,10,20)//

bind是先將fn中的this指向obj,並且將引數10,20預先傳遞給fn,但是此時的fn並沒有被執行,只有fn執行時this指向和傳遞引數才有作用

fn.bind(obj,10,20);//

=>不會有任何輸出

fn.bind(obj,10,20)();//

=>呼叫後才會有輸出

//=>需求:點選box這個盒子的時候,需要執行fn,並且讓fn中的this指向obj

obox.onclick=fn; //

=>點選的時候執行了fn,但此時fn中的this是obox

obox.onclick=fn.call(opp); //

=>繫結事件的時候就已經把fn立即執行了(call本身就是立即執行函式),然後把fn執行的返回值繫結給事件

obox.onclick=fn.bind(opp);

//=>fn.bind(opp):fn調取function.prototype上的bind方法,執行這個/*

* function

() */obox.onclick=function

()

JS中三個點( )是什麼鬼?

我們在看js 時經常會出現 三個點的東西,它究竟是什麼意思?又有何用處?下面我就給大家分享一下三個點的那些事 三個點 真名叫擴充套件運算子,是在es6中新增加的內容,它可以在函式呼叫 陣列構造時,將陣列表示式或者string在語法層面展開 還可以在構造字面量物件時將物件表示式按照key value的...

漢語中「三個三個的,你認識多少?」

三個金念鑫 x n 三個水念淼 mi o 三個火念焱 y n 三個土念垚 y o 三個牛念犇 b n 三個手念掱 p 三個目念瞐 m 三個田念畾 l i 三個馬念驫 bi o 三個羊念羴 sh n 三個犬念猋 bi o 三個鹿念麤 c 三個魚念鱻 xi n 三個貝念贔 b 三個力念劦 lie 三個毛...

Makefile中三個自動變數 , ,

所謂自動變數,就是這種變數會把模式中所定義的一系列的檔案自動地挨個取出,直至所有的符合模式的檔案都取完了。這種自動化變數只應出現在規則的命令中。以乙個例子說明 objs ifconfig.o tftp util.o ping.o srcs objs o c phony all all built i...