首页
学习
活动
专区
工具
TVP
发布

jsthis指向问题及call,apply,bind的区别

jsthis指向问题及call,apply,bind的区别# 1 this指向# 1.1 what is 'this'?...1.2 标准函数箭头函数的this指向# this在标准函数箭头函数的时会有两种不同类型的指向行为。...1.2.1 标准函数的this指向# 在标准函数,this 指向的是把函数当成方法调用的上下文对象。也就是说在哪里调用的这个函数,那这个this只会指向它外面最靠近它的对象。...,解析的时候也是跟call一样顺序对应; call、apply没有返回值,而bind改变完this指向后会返回一个改变完this指向之后的原函数的拷贝 可以再次进行调用。...例如: a.say.bind(b)('男', 'UNO') 运行的结果如下: 3 小结# 关于this指向、call、apply、bind的记录本篇就总结到这里,在日常使用脚手架、组件开发时可能会用的地方比较少

1.1K20

jsthis指向问题

函数this指向对于一些开发者来说一直是一个比较头疼的问题,this在js中比较灵活,不同的情况指向不同,小shy总结出了函数调用的this指向的一些情况,供大家参考。 1....默认绑定 function fn() { console.log(this); } fn(); 结果:this指向window对象 函数在被调用的时候,this会默认指向全局对象window...}; const obj2 = { name: "小红" }; obj1.fn.call(obj2); // 小红 obj1.fn.apply(obj2); // 小红 obj1.fn.bind...(obj2)(); // 小红 这里call()、apply和bind方法都是可以改变函数的this指向,所以fn函数调用this都指向了obj2对象,所以得出结果为小红。...(如果不太明白call()、apply() 和 bind(),可以看小shy之前的博客《js call()、apply()、bind()用法和区别》) 4.

2.6K60
您找到你想要的搜索结果了吗?
是的
没有找到

我攻克的技术难题:JS改变this的指向:call()、apply()、bind()

3种动态指定普通函数this的指向的方法:call()、apply()、bind() 在之前的学习,我发现在学习了很多JS方法后,却没有真正的应用起来或者是理解什么时候需要使用这些方法,导致自己很快就遗忘自己所学过的知识...所以在以后的笔记,我都会添加这些所学知识的应用场景。...console.log(fun)应用场景只想改变this指向,并且不想调用这个函数的比如改变定时器内部的this指向:如果有一个按钮,当我们点击了之后就禁用这个按钮,2秒钟之后又开启这个按钮总结call()、apply()、bind()都可以改变函数内部的this指向,但是call...传递参数aru1,aru2...形式 apply传递参数arg形式bind区别于其他两种,不会调用函数我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

26432

JS的this指向问题

全局上下文 非严格模式和严格模式this都是指向顶层对象(浏览器是window)。...根据参数thisArg的描述,可以知道,call就是改变函数的this指向为thisArg,并且执行这个函数,这也就使JS灵活很多。严格模式下,thisArg是原始值是值类型,也就是原始值。...bind和call和apply类似,第一个参数也是修改this指向,只不过返回值是新函数,新函数也能当做构造函数(new)调用。...非严格模式下,null和undefined,指向全局对象(浏览器是window),其余值指向被new Object()包装的对象。 对象上的函数调用:绑定到那个对象。...this指向问题可以考察new、call、apply、bind,箭头函数等用法。从而扩展到作用域、闭包、原型链、继承、严格模式等。

1.3K30

jsthis到底指向什么?

jsthis到底指向什么? 一、前言 前段时间,公司让我改一个界面,我心想改个界面还不简单吗?结果呃,我低估了这颗炸弹的威力。 好吧是我太菜,总结一下,这个this的指向问题。...在js,this的指向在定义函数的时候是确定不了的,只有在使用这个函数的时候才能确定this的指向。 一般来说在使用时,谁调用的这个函数,函数的this就指向它。...对象的函数,在运行时this指向了me这个对象。...在js,this的指向在定义函数的时候是确定不了的,只有在使用这个函数的时候才能确定this的指向。 这样,我稍微能理解点了,简单的来说就是谁调用的这个函数,函数里面的this就指向谁。...由此来看,定时器启动的函数的this都是指向window。

90510

JS 几种轻松处理’this’指向方式

我喜欢在JS更改函数执行上下文的指向,也称为 this 指向。...()`的`this`是全局对象 Click me 接着介绍一些有用的方法,即如果方法对象分离,...但是有一个涉及bind()方法的技巧,它将方法的上下文绑定到构造函数: ```JavaScript class Person { constructor(firstName, lastName...这种方法是在类绑定this的最有效和最简洁的方法。 6. 总结 对象分离的方法会产生 this 指向不正确问题。静态地绑定this,可以手动使用一个附加变量self来保存正确的上下文对象。...在类,可以使用bind()方法手动绑定构造函数的类方法。当然如果你不用使用 bind 这种冗长方式,也可以使用简洁方便的胖箭头表示方法。

98520

关于JSthis指向问题的探究

写在前面 本篇文章的所有例子来源都是《JS设计模式开发实践》这本书,写这篇文章之前也去查阅了很多关于this指向问题的探讨,包括但不仅仅有像阮一峰老师,还有很多的博主的帖子,还是决定写这篇文章有以下几个原因...,第一,加深自己的理解,重新理一遍关于这方面的知识,第二,我尽可能的使用通俗简单的说辞进行解释 力求让更多的人明白这个东西,第三,this是js的一个关键字,很有必要单独拿出来写一篇文章。...js的this this js的this总是指向一个对象,也就是一个obj,但是具体指向的是哪一个obj是根据具体的运行时函数的执行环境动态绑定的,而不是函数被声明的环境!...,也就是windows,因为在js全局对象就是windows window.name = "globalName" var getName = function () {...JS很多别的不好理解的概念差不多,用的多了就明白了为什么那么写,很多的时候我们看到一个错,就知道需要使用let that = this类似这样的代码块解决,究其原因是他很理解错误的原因吗?

1.4K31

JScall apply bind的用法

谁调用当前的属性或者方法的,它就是谁 /* 2.1.bind方法作用 修改函数或者方法的this为指定的对象, 并且会返回一个修改之后的新函数给我们 注意点...: bind方法除了可以修改this以外, 还可以传递参数, 只不过参数必须写在this对象的后面 */ //call apply bind修改this的.../*call:修改函数或者方法的this为指定的对象, 并且会立即调用修改之后的函数 注意点: call方法除了可以修改this以外, 还可以传递参数, */.../*apply:修改函数或者方法的this为指定的对象, 并且会立即调用修改之后的函数 注意点: apply方法除了可以修改this以外, 还可以传递参数, 只不过参数必须通过数组的方式传递...console.log(this); } test(10,20); window.test(); let fn=test.bind

2.9K30

jscall、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...答案是改变函数执行时的上下文,再具体一点就是改变函数运行时的this指向。有了这个认识,接下来我们来看一下,怎么使用这三个函数。...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、applybind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...的伪数组(例如通过document.getElementsByTagName获取的元素)具有length属性,并且可以通过0、1、2…下标来访问其中的元素,但是没有Array的push、pop等方法...要往数组添加元素,可以直接用push方法, 1234567 var arr1 = [1,2,3];var arr2 = [4,5,6];[].push.apply(arr1, arr2);// arr1

1.7K50

jscall、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...答案是改变函数执行时的上下文,再具体一点就是改变函数运行时的this指向。有了这个认识,接下来我们来看一下,怎么使用这三个函数。...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、applybind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...8,687); Math.min.apply(Math, arr); Math.min.call(Math, 34,5,3,6,54,6,-67,5,7,6,-8,687); 将伪数组转化为数组 js...的伪数组(例如通过document.getElementsByTagName获取的元素)具有length属性,并且可以通过0、1、2…下标来访问其中的元素,但是没有Array的push、pop等方法

1.6K60
领券