摘要:中的代表的是当前行为的主体中的代表的是当前行为的执行环境区域是谁和函数在哪里宝的和在哪执行的都没有任何关系函数执行,首先看函数名前面是否有有的话,前面是谁就是谁没有的话就是自执行函数中的永远是给元素的某一个事件绑定方法,当事件触
this
js中的this代表的是当前行为的主体
js中的context代表的是当前行为的执行环境区域
this是谁和函数在哪里宝的和在哪执行的都没有任何关系
函数执行,首先看函数名前面是否有"." ,有的话,"."前面是谁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();自执行函数中的this永远是window
function fn() { console.log(this)//window } fn()给元素的某一个事件绑定方法,当事件触发的时候,执行对应的方法,方法中的this是当前的元素 直接调用
function fn() { console.log(this) } document.getElementById("div1").onclick = fn; //this->#div匿名函数调用
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传递参数的时候,是一个个的传递值的,而apply不是一个一个传,而是把要给fn传递的参数值统一放在一个数组中进行操作,但是也相当于一个个的给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改变为我们想要的结果,并且把对应的参数值也准备好,以后要用到了,直接的执行即可
var result = fn.bind(obj,1,2) 只是改变了fn中的this为obj,并且给fn传递了两个参数值100,200,但是此时并没有把fn这个函数执行,执行bind会有一个返回值,这个返回值result就是我们把fn的this改变后的哪个结果
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)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/98951.html
摘要:首先我们可以通过给目标函数指定作用域来简单实现方法保存,即调用方法的目标函数考虑到函数柯里化的情况,我们可以构建一个更加健壮的这次的方法可以绑定对象,也支持在绑定的时候传参。原因是,在中,多次是无效的。而则会立即执行函数。 bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 apply、call 在 javascript 中,call 和 apply 都是...
摘要:不能应用下的等方法。首先我们可以通过给目标函数指定作用域来简单实现方法保存,即调用方法的目标函数考虑到函数柯里化的情况,我们可以构建一个更加健壮的这次的方法可以绑定对象,也支持在绑定的时候传参。原因是,在中,多次是无效的。 bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 apply、call 在 javascript 中,call 和 apply 都是...
摘要:和概览我们要将归为一类,单独归为一类三者的共同点是都可以指定和都是绑定在的原型上的,所以的实例都可以调用这三个方法至于为什么,看完这篇文章你就懂了如果你不懂什么是实例的话,请移步深入浅出面向对象和原型概念篇深入浅出面向对象和原型概念篇第一个 1.call/apply和bind概览 我们要将call/apply归为一类,bind单独归为一类 三者的共同点是都可以指定this call/...
摘要:和区别其实他们的作用是一样的,只是传递的参数不一样而已。接受个参数,第一个参数指定了函数体内对象的指向,第二个参数为数组或者一个类数组。看个栗子一个有意思的事在中,多次是无效的。而则会立即执行函数。 背景 前两天在做小程序的需求的时候用到bind的时候才想起自己对这三的东西的了解比较浅薄,这个时候用的时候就有点怕。时候还是要好好学习下,理解下怎么玩。 正文 先说call 和 apply...
摘要:如果连续呢结果会是什么结果还是第一个原因是,在中,多次是无效的。更深层次的原因,的实现,相当于使用函数在内部包了一个,第二次相当于再包住第一次故第二次以后的是无法生效的。 this 1.其实js中的this没那么难理解,当找不到this时记住一句话:谁调我,我就指谁!new 谁指谁 function text1(){ console.log(this); //指wind...
摘要:理解文章中已经比较全面的分析了在中的指向问题,用一句话来总结就是的指向一定是在执行时决定的,指向被调用函数的对象。与和直接执行原函数不同的是,返回的是一个新函数。这个新函数包裹了原函数,并且绑定了的指向为传入的。 理解 JavaScript this 文章中已经比较全面的分析了 this 在 JavaScript 中的指向问题,用一句话来总结就是:this 的指向一定是在执行时决定的,...
阅读 1826·2021-11-11 16:55
阅读 1452·2019-08-30 15:54
阅读 769·2019-08-29 15:34
阅读 2252·2019-08-29 13:11
阅读 2908·2019-08-26 13:28
阅读 1877·2019-08-26 10:49
阅读 992·2019-08-26 10:40
阅读 2552·2019-08-23 18:21