首页
学习
活动
专区
工具
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指向)

    开始从js的this对象说起,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指向,此时第一个参数是 字符串

    61400

    我攻克的技术难题: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腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

    36732

    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

    JS中的this指向问题

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

    95830

    执行函数中改变 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.2K61

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

    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 !

    46720

    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指向这块,你基本上是过关的。

    81210

    关于JS中this指向问题的探究

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

    1.4K31

    面试官问:JS的this指向

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

    76720
    领券