摘要:中的代表的是當前行為的主體中的代表的是當前行為的執(zhí)行環(huán)境區(qū)域是誰和函數(shù)在哪里寶的和在哪執(zhí)行的都沒有任何關(guān)系函數(shù)執(zhí)行,首先看函數(shù)名前面是否有有的話,前面是誰就是誰沒有的話就是自執(zhí)行函數(shù)中的永遠是給元素的某一個事件綁定方法,當事件觸
this
js中的this代表的是當前行為的主體
js中的context代表的是當前行為的執(zhí)行環(huán)境區(qū)域
this是誰和函數(shù)在哪里寶的和在哪執(zhí)行的都沒有任何關(guān)系
函數(shù)執(zhí)行,首先看函數(shù)名前面是否有"." ,有的話,"."前面是誰this就是誰,沒有的話this就是window
function fn() { console.log(this) } var obj = { fn: fn } fn(); //this->window obj.fn(); //this->obj
function sum() { console.log(this)//this->window fn(); //this->window } sum();
var oo = { sum: function() { console.log(this)//this->00 fn(); //this->window }, aa:"aa" } oo.sum();自執(zhí)行函數(shù)中的this永遠是window
function fn() { console.log(this)//window } fn()給元素的某一個事件綁定方法,當事件觸發(fā)的時候,執(zhí)行對應的方法,方法中的this是當前的元素 直接調(diào)用
function fn() { console.log(this) } document.getElementById("div1").onclick = fn; //this->#div匿名函數(shù)調(diào)用
function fn() { console.log(this) } document.getElementById("div1").onclick = function(){ console.log(this) // this->#div fn()//this->window }call
非嚴格模式
var obj = { name: "jie" }; function fn(num1, num2) { console.log(this); console.log(num1 + num2); } fn(100,200); //this ->window num1=100,num2=200 fn.call(100,200) //this->100 num1 = 200,num2=undefined fn.call(obj,100,200); //this->obj num1 = 100,num2=200 fn.call(); //this->window fn.call(null); //this->window fn.call(undefined); //this->window
嚴格模式
"use strict"; var obj = {name:"jie"}; function fn(num1,num2){ console.log(this); console.log(num1+num2); } fn(100,200); //this ->window num1=100,num2=200 fn.call(100,200) //this->100 num1 = 200,num2=undefined fn.call(obj,100,200); //this->obj num1 = 100,num2=200 fn.call(); //undefined fn.call(null); //null fn.call(undefined); //undefinedapply
apply和call的方法的作用是一模一樣的,
call在給fn傳遞參數(shù)的時候,是一個個的傳遞值的,而apply不是一個一個傳,而是把要給fn傳遞的參數(shù)值統(tǒng)一放在一個數(shù)組中進行操作,但是也相當于一個個的給fn的形參賦值
var obj = { name: "jie" }; function fn(num1, num2) { console.log(this); console.log(num1 + num2); } fn(100,200); //this ->window num1=100,num2=200 fn.apply([100,200]) //this->[100,200] num1 = NaN,num2=NaN fn.apply(obj,[100,200]); //this->obj num1 = 100,num2=200 fn.apply(); //this->window fn.apply(null); //this->window fn.apply(undefined); //this->windowbind
預處理:事先把fn的this改變?yōu)槲覀兿胍慕Y(jié)果,并且把對應的參數(shù)值也準備好,以后要用到了,直接的執(zhí)行即可
var result = fn.bind(obj,1,2) 只是改變了fn中的this為obj,并且給fn傳遞了兩個參數(shù)值100,200,但是此時并沒有把fn這個函數(shù)執(zhí)行,執(zhí)行bind會有一個返回值,這個返回值result就是我們把fn的this改變后的哪個結(jié)果
var obj = { name: "jie" }; function fn(num1, num2) { console.log(this); console.log(num1 + num2); } var result = fn.bind(obj, 100, 200); //this->obj num1 = 100,num2=200 console.log(result)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/98951.html
摘要:首先我們可以通過給目標函數(shù)指定作用域來簡單實現(xiàn)方法保存,即調(diào)用方法的目標函數(shù)考慮到函數(shù)柯里化的情況,我們可以構(gòu)建一個更加健壯的這次的方法可以綁定對象,也支持在綁定的時候傳參。原因是,在中,多次是無效的。而則會立即執(zhí)行函數(shù)。 bind 是返回對應函數(shù),便于稍后調(diào)用;apply 、call 則是立即調(diào)用 。 apply、call 在 javascript 中,call 和 apply 都是...
摘要:不能應用下的等方法。首先我們可以通過給目標函數(shù)指定作用域來簡單實現(xiàn)方法保存,即調(diào)用方法的目標函數(shù)考慮到函數(shù)柯里化的情況,我們可以構(gòu)建一個更加健壯的這次的方法可以綁定對象,也支持在綁定的時候傳參。原因是,在中,多次是無效的。 bind 是返回對應函數(shù),便于稍后調(diào)用;apply 、call 則是立即調(diào)用 。 apply、call 在 javascript 中,call 和 apply 都是...
摘要:和概覽我們要將歸為一類,單獨歸為一類三者的共同點是都可以指定和都是綁定在的原型上的,所以的實例都可以調(diào)用這三個方法至于為什么,看完這篇文章你就懂了如果你不懂什么是實例的話,請移步深入淺出面向?qū)ο蠛驮透拍钇钊霚\出面向?qū)ο蠛驮透拍钇谝粋€ 1.call/apply和bind概覽 我們要將call/apply歸為一類,bind單獨歸為一類 三者的共同點是都可以指定this call/...
摘要:和區(qū)別其實他們的作用是一樣的,只是傳遞的參數(shù)不一樣而已。接受個參數(shù),第一個參數(shù)指定了函數(shù)體內(nèi)對象的指向,第二個參數(shù)為數(shù)組或者一個類數(shù)組。看個栗子一個有意思的事在中,多次是無效的。而則會立即執(zhí)行函數(shù)。 背景 前兩天在做小程序的需求的時候用到bind的時候才想起自己對這三的東西的了解比較淺薄,這個時候用的時候就有點怕。時候還是要好好學習下,理解下怎么玩。 正文 先說call 和 apply...
摘要:如果連續(xù)呢結(jié)果會是什么結(jié)果還是第一個原因是,在中,多次是無效的。更深層次的原因,的實現(xiàn),相當于使用函數(shù)在內(nèi)部包了一個,第二次相當于再包住第一次故第二次以后的是無法生效的。 this 1.其實js中的this沒那么難理解,當找不到this時記住一句話:誰調(diào)我,我就指誰!new 誰指誰 function text1(){ console.log(this); //指wind...
摘要:理解文章中已經(jīng)比較全面的分析了在中的指向問題,用一句話來總結(jié)就是的指向一定是在執(zhí)行時決定的,指向被調(diào)用函數(shù)的對象。與和直接執(zhí)行原函數(shù)不同的是,返回的是一個新函數(shù)。這個新函數(shù)包裹了原函數(shù),并且綁定了的指向為傳入的。 理解 JavaScript this 文章中已經(jīng)比較全面的分析了 this 在 JavaScript 中的指向問題,用一句話來總結(jié)就是:this 的指向一定是在執(zhí)行時決定的,...
閱讀 1843·2021-11-11 16:55
閱讀 1457·2019-08-30 15:54
閱讀 778·2019-08-29 15:34
閱讀 2260·2019-08-29 13:11
閱讀 2914·2019-08-26 13:28
閱讀 1885·2019-08-26 10:49
閱讀 1000·2019-08-26 10:40
閱讀 2561·2019-08-23 18:21