首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

This指向改变This指向

This指向改变This指向 This 指向 在 ES5 中,其实 this 指向,始终坚持一个原理:this 永远指向最后调用它那个对象。...改变 this 指向 改变 this 指向我总结有以下几种方法: 使用 ES6 箭头函数 在函数内部使用 _this = this 使用 apply、call、bind new 实例化一个对象 例...使用 apply、call、bind 使用 apply、call、bind 函数也是可以改变 this 指向, 使用 apply 例 10: var a = { name : "Cherry...使用 call 改变 this 指向 如果无返回值或者返回一个非对象值,则将 obj 返回作为新对象;如果返回值是一个新对象的话那么直接直接返回该对象。...所以我们可以看到,在 new 过程中,我们是使用 call 改变了 this 指向

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

js中扩充函数作用域(改变this指向)

开始从jsthis对象说起,this对象就是函数执行环境对象。...(注意函数不加后面()时候,那时候就不是调用,那只是一个包含函数指针变量) 由于函数执行环境变成了obj对象,所以this只想就指向了obj,所以自然就输出了“Tom”。...函数扩展this对象 es5提供了三个函数非继承方法,可以直接改变this指向,但是在书中说是扩充函数作用域,但是我认为改变this指向更贴切一点。...三个方法分别为:apply,call,bing,用法都比较简单,作用也都是改变函数this指向,下面我就用代码来简单说明一下。...这三个方法功能都是相同,都是改变this指向,只是使用形式上有一点不同,大家可灵活运用。

2.6K11

JS改变this指向三种方法 (转载非原创)

(属性和方法)箭头函数中没有this指向,如果在箭头函数中有,则会向上一层函数中查找this,直到window二、改变this指向1、call() 方法call() 方法第一个参数必须是指定对象,然后方法原参数...(this); // 原来函数this指向是 Window}fun(); function fun(a, b) { console.log(this); // this指向了输入 字符串call...console.log(a + b);}//使用call() 方法改变this指向,此时第一个参数是 字符串call,那么就会指向字符串callfun.call('call', 2, 3) /...console.log(a + b);}//使用apply() 方法改变this指向,此时第一个参数是 字符串apply,那么就会指向字符串applyfun.apply('apply', [2,...{ console.log(this); // this指向了输入 字符串bind console.log(a + b);}//使用bind() 方法改变this指向,此时第一个参数是 字符串

44900

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

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

28632

JS中this指向

JS中this指向 this指向在函数定义时候是确定不了,只有函数执行时候才能确定this到底指向谁,实际上this最终指向是那个调用它对象。...实例 定义函数与对象并调用,注意只有调用函数才会使this指向调用者,但箭头函数除外。...(this); } }, t5: function(){ // 测试函数调用时箭头函数this指向,其指向了上一层对象调用者 return {...,我们调用同一个方法,但是得到this是不同,要注意实际上this最终指向是那个调用它对象 var s1 = { t1: function(){ console.log...由此,this指向了window 改变this指向 使用 apply、call、bind可以改变this指向,可以参考 https://github.com/WindrunnerMax/EveryDay

1.9K20

JSthis指向问题

this指向问题 this应该是第一个让人对JavaScript困惑问题了,但是实际上它原理非常简单:函数this在运行时绑定。 什么叫运行时绑定?...就是函数this和你写在哪里无关,而是和谁调用它有关。谁调用这个函数,this就指向谁。 你现在大概会在想:原来这么简单,我精通了!...先问自己:谁调用它?你应该一下看不出来,这明明就是直接调啊!可能有的基础比较扎实的人会说是window,那真是非常恭喜你了,但你要注意是以上代码在严格模式下是undefined。...正解:brother call / bind / apply 此为3种干预this指向操作,限于篇幅不展开讲。...箭头函数 箭头函数可以让你省很多事,因为它this一般来说都是符合你直觉:它this就是定义时候this。

93930

执行函数中改变 this 指向以及方法

所以,还是改成 执行函数中改变 this 指向以及方法。 改变 this 指向方法和执行 bind,apply,call 都是执行函数时,用来改变 this 指向。...为什么需要改变这个 this 指向 需要改变这个 this 指向,是因为原来 this 被污染了,需要重新再进行 this 指向,因为,this 指向是被调用父级作用域,而如果函数在另一个函数里面执行时候...以下是改变 this 指向方法。 使用 call 改变 this 指向 call第一个参数是 this 指向,后面是一个传入参数列表。...使用 apply 改变 this 指向 使用 apply 改变 this 指向和 call 改变指向大致上方法是一样,唯一有不同就是传参是以单个参数(数组)进行传递,如下图: const fighter...而 bind 是手动执行同时 bind 是永久改变 this 指向

1.1K61

指针叠加会不断改变指针指向

test() { //指针叠加会不断改变指针指向 //指针p一开始指向堆区开辟内存首地址 char* p = (char*)malloc(sizeof(char)*20); char buf...,指针p指向也在不断改变 *p = buf[i]; //指针p每次+1,是根据char类型推导出每次加上一个字节长度 p++;//修改原来指针指向 } if (p !...CRT_SECURE_NO_WARNINGS #include #include #include void test() { //指针叠加会不断改变指针指向...//指针p一开始指向堆区开辟内存首地址 char* p = (char*)malloc(sizeof(char)*20); char buf[10] = "hello"; int len=strlen...,指针p指向也在不断改变 *pp = buf[i]; //指针p每次+1,是根据char类型推导出每次加上一个字节长度 pp++;//修改原来指针指向 } if (p !

44320

react事件处理为什么要bind this 改变this指向

这句话大概意思就是,你要小心jax回调函数里面的this,class方法默认是不会绑定它 让我十分疑惑,在我知识范围理解中,class是es6里面新增方法,不就用来继承原有对象上属性和方法创建新对象吗...就是代替原来构造函数一种更清晰方式,为什么就不会绑定this呢? 可是查阅了一些es6文档,并不是这样啊,和class方法没啥关系吧,为什么要它背锅呢?...原因是jsx语法,渲染时候会把{}里面包裹代码先解析一遍,因为如果加了括号,直接就执行了里面的函数,就没有东西了,但是这个时候,this是可以拿到 class App extends Component...(eval(obj.handleClick))() //onclick触发点击事件 这里输出this是window,所以就等于丢失了this指向 console.log(eval((...()}))() //onclick触发点击事件 这里输出this还是obj,所以this就保留了   所以问题出在react对{}解析会把this指向解除了

1.3K30

js中关于this指向训练题

this指向js开发中必须掌握知识,今天我们就用一道题目来看看你基础。 ? 各位认为会输出什么呢?请大家先思考不要直接去运行看答案。 实际上会输出:5和2。...(1):第一行fn(),这个毫无疑问,this指向是window,所以length自然输出5,大家不要看到fn()在obj对象里面调用,就把this认为指向了obj,这是非常错误; this指向谁,...是在于函数执行时环境对象,fn()在执行时,他环境对象依然是window,这里fn()大家可以理解为window.fn(),是这样进行执行。...所以,这里大家可以理解为:arguments[0]()=arguments.fn(); this对象就是指向了arguments,length也自然是2了。...大家明白了吗,这道题对于this指向还是比较经典题目,如果这道题可以独立做出来,证明this指向这块,你基本上是过关

79110

关于JS中this指向问题探究

写在前面 本篇文章所有例子来源都是《JS设计模式与开发实践》这本书,写这篇文章之前也去查阅了很多关于this指向问题探讨,包括但不仅仅有像阮一峰老师,还有很多博主帖子,还是决定写这篇文章有以下几个原因...,第一,加深自己理解,重新理一遍关于这方面的知识,第二,我尽可能使用通俗简单说辞进行解释 力求让更多的人明白这个东西,第三,this是js一个关键字,很有必要单独拿出来写一篇文章。...jsthis this jsthis总是指向一个对象,也就是一个obj,但是具体指向是哪一个obj是根据具体运行时函数执行环境动态绑定,而不是函数被声明环境!...,也就是我们常见普通函数使用时候,此时this其实指向是当前全局对象,也就是windows,因为在js中全局对象就是windows window.name = "globalName...console.info(this.id) //windows } callback() } 这个时候我们想callback里面的this指向不发生改变的话

1.4K31

面试官问:JSthis指向

1.面试官问:能否模拟实现JSnew操作符 2.面试官问:能否模拟实现JSbind方法 3.面试官问:能否模拟实现JScall和apply方法 4.面试官问:JSthis指向 5.面试官问:JS...继承 面试官出很多考题,基本都会变着方式来考察this指向,看候选人对JS基础知识是否扎实。...根据参数thisArg描述,可以知道,call就是改变函数中this指向为thisArg,并且执行这个函数,这也就使JS灵活很多。严格模式下,thisArg是原始值是值类型,也就是原始值。...之前也写了一篇文章面试官问:能否模拟实现JSnew操作符,是使用apply来把this指向到生成新生成对象上。感兴趣读者思考如何实现,再去看看笔者实现。...4、不可以改变this绑定。5、形参名称不能重复。 箭头函数中没有this绑定,必须通过查找作用域链来决定其值。

73920
领券