這三個都是函式自帶的方法(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...