This指向与改变This指向 This 的指向 在 ES5 中,其实 this 的指向,始终坚持一个原理:this 永远指向最后调用它的那个对象。 例 5: var name = "windowsName"; var a = { name : null, // name: "Cherry", fn : function ( 所以 this 指向的也就是 window。 this 的指向并不是在创建的时候就可以确定的,在 es5 中,永远是this 永远指向最后调用它的那个对象。 我们将 this(指向变量 a) 赋值给一个变量 _this,这样,在 func2 中我们使用 _this 就是指向对象 a 了。 从ECMAScript 5 开始可以使用类数组对象。浏览器兼容性请参阅本文底部内容。 其实 apply 和 call 基本类似,他们的区别只是传入的参数不同。
前言 我是歌谣 最好的种树是十年前 其次是现在 今天继续给大家带来的是this指向的讲解 环境配置 npm init -y yarn add vite -D 修改page.json配置端口
1.this 1.1函数内部的this指向 这些 this 的指向,是当我们调用函数的时候确定的。调用方式的不同决定了this 的指向不同 一般指向我们的调用者. ? 1.2改变函数内部 this 指向 JavaScript 为我们专门提供了一些函数方法来帮我们更优雅的处理函数内部 this 的指向问题,常用的有 bind()、 call()、apply() 三种方法 简单理解为调用函数的方式,但是它可以改变函数的 this 指向。 this指向 不同点: call 和 apply 会调用函数, 并且改变函数内部this指向. 比如借助于数学对象实现数组最大值最小值 bind 不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向.
source=cloudtencent this 指向分为两种情况,一种是普通函数中使用的 this,另外一种是箭头函数中的 this。 普通函数 this 指向调用者。 场景 5 const div = document.querySelector('.content') div.onclick = function () { console.log(this 箭头函数本身不存在 this,所以它的 this 指向上一层作用域所在的对象。 sayHi 所在的对象 person,所以无论是谁调用了 fn ,this 始终指向 person。 改变 this 指向 通过 call() apply() bind() 可以改变 this 指向。
1.函数内部的this指向 这些 this 的指向,是当我们调用函数的时候确定的。调用方式的不同决定了this 的指向不同 一般指向我们的调用者. ? 2.改变函数内部 this 指向 JavaScript为我们专门提供了一些函数方法来帮我们更优雅的处理函数内部 this的指向问题,常用的有bind()、call()、apply()三种方法。 简单理解为调用函数的方式,但是它可以改变函数的 this 指向。 , 并且改变函数内部this指向. 比如借助于数学对象实现数组最大值最小值 bind 不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向.
JS(ES5)里面有三种函数调用形式: func(p1, p2) obj.child.method(p1, p2) func.call(context, p1, p2) // 先不讲 apply 一般 有人说「箭头函数里面的 this 指向箭头函数外面的 this」,这很傻,因为箭头函数内外 this 就是同一个东西,并不存在什么指向不指向。
可以看出普通函数this指向了本身对象,而箭头函数this往外层找指向了window,因为window没有name字段所以没有输出。 箭头函数使this从“动态”变成“静态”,实质是内部没有this指向,继承上级对象this指向箭头函数的this指向定义时外部作用域内的this指向,普通函数的this指向调用时根据上下文取确认.resp4 3.无法作为构造函数 箭头函数作为匿名函数,没有prototype,没有自己的this指向,因此不能使用new构造函数非对称加密的密钥不是一个,而是一对。
This的指向问题一直是JavaScript的一大核心,很多人都是觉得了解了,但是又模模糊糊。简单概括就是,this的指向永远是指向调用这个this的对象。下面介绍几个本人理解的this指向问题。 var a = 10; console.log(this.a); alert(this.a); 这是最简单的this指向问题,console.log()和alert()是两个函数,是window的函数 var a = 10; window.console.log(this.a); window.alert(this.a); 所以调用函数的对象是window,this也就是指向window。 b: function () { console.log(this.a); } }; obj.b(); 可以看见,b方法是对象obj里面的方法,那么调用b方法的对象就是obj,这时的this指向就是指向 接下来就是改变this指向的两个方法,call和apply,两个都是改变this的指向,只是参数不同,两个方法的第一个参数都是想要改变this指向的对象,call除了第一个参数外,剩下的都是方法的参数,
我们在注册一些免费域名或者使用多个域名的时候,经常会遇到域名指向的问题。域名指向有隐藏性和非隐藏性两种类型。 隐藏指向和非隐藏指向都可以将与名指向到客户指定的已经可以访问的网站,但是这两种指向方式还是存在不一样的地方。 域名指向有什么用? 例如您已经注册了yiqixue.net ,但是并没有使用这个域名建站,只希望这个域名指向到已经可以正常使用的一个网站的子目录,就可以使用域名指向的功能来实现。 域名隐藏指向和非隐藏指向有何不同? 例如域名 www.yiqixue.net 要指向到已经可以访问的 http://www.hcm602.cn 使用域名隐藏操作的结果: 在IE地址栏输入: https://www.cmhello.com
this.a + this.b + c + d; } var o = {a: 1, b: 3}; // 第一个参数是用作“this”的对象 // 其余参数用作函数的参数 add.call(o, 5,
要知道 this 指向问题,需要知道函数调用栈,函数调用的位置。 隐式绑定 非严格模式下,函数调用 this 指向调用者。 bar = function() { return foo.apply(obj, arguments) } var b = bar(3) // 2 3 console.log(b) // 5 }; } var obj = { a:2 }; var bar = bind( foo, obj ); var b = bar( 3 ); // 2 3 console.log( b ); // 5 something; } var obj = { a: 2 } var bar = foo.bind(obj) var b = bar(3) // 2 3 console.log(b) // 5
先搞清楚一点,如果this在函数里面,那么它指向的是“函数执行后”的上一级调用对象。 var a="this is a"; function main() { console.log(this.a)//这里this指向window. } main()//这里相当于 o,因为你调用这个say是通过o.say()执行的,那自然指向就是对象o,这里再次强调一点,this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。 :“maomin”,say1:function(){console.log(this.name);//maomin}}window.o.say1();// 上面几行代码和之前的代码几乎相似,为什么没有指向 window,这就回到了我刚开始说的,this如果在函数内,那么它指向的是该函数执行后的上一级调用对象。
函数中this指向对于一些开发者来说一直是一个比较头疼的问题,this在js中比较灵活,不同的情况指向不同,小shy总结出了函数调用的this指向的一些情况,供大家参考。 1. 默认绑定 function fn() { console.log(this); } fn(); 结果:this指向window对象 函数在被调用的时候,this会默认指向全局对象window function() { console.log(this); console.log(this.name); } }; obj.fn(); 结果: this指向 obj对象,this.name 即 obj.name 调用对象的方法时会出现隐式绑定,fn是在obj对象里的,obj调用fn,this就会指向obj对象。 ,所以fn函数调用this都指向了obj2对象,所以得出结果为小红。
2.this 2.1函数内部的this指向 这些 this 的指向,是当我们调用函数的时候确定的。调用方式的不同决定了this 的指向不同 一般指向我们的调用者. ? 2.2改变函数内部 this 指向 2.2.1 call方法 call()方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的 this 指向 应用场景: 经常做继承. 简单理解为调用函数的方式,但是它可以改变函数的 this 指向。 2.2.4 call、apply、bind三者的异同 共同点 : 都可以改变this指向 不同点: call 和 apply 会调用函数, 并且改变函数内部this指向. 比如借助于数学对象实现数组最大值最小值 bind 不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向.
箭头函数基本使用 // 箭头函数: 也是一种定义函数的方式 // 1.定义函数的方式: function const aaa = function () { } // 2.对象字面量中定义函数 const obj = { bbb() { } } // 3.ES6中的箭头函数 // const ccc = (参数列表) => { // // } const ccc = () => { } 带返回值的箭头函数 // 1.参数问题: /
JavaScript 中this取什么值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了,因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境 this作为普通函数,指向 window function fn1() { console.log(this) } fn1() // window 使用call() apply() bind(),指向第一个参数 fn1.call ({x: 100}) // 指向第一个参数 {x: 100} 作为对象方法被调用,指向调用该方法的对象 const niangao = { name: '年糕', sayHi() { / // setTimeout是作为普通函数去执行,而不是作为niangao.wait()去执行 console.log(this) }) } } 在class方法中被调用,指向实例对象 } eat() { console.log(this) } } const niangao = new Food('年糕') niangao.eat() // Food{} 箭头函数,指向上级作用域的
本文继续讨论 this 指向 问题,今天讨论: 函数中的this 0 1 箭头函数 箭头函数忽略任何形式的this指向改变. 当在严格模式下,test打印还是为window, test2 则打印undefined 箭头函数中的this ,不是谁调用就指向谁 示例2: obj.test=()=>{ console.log ); } t2(); } t1(); } obj.test(); 结果为:window 总结:箭头函数 this 作用域, 指向外层非箭头函数作用域的 总结: call、apply、bind 三个方法都可以改变函数中this 的指向 call、apply :立即执行 bind 返回一个新函数 var obj={ name:'sunshine',
; 多层嵌套的对象,内部方法的this指向离被调用函数最近的对象(window也是对象,其内部对象调用方法的this指向内部对象, 而非window); function independent() { return this.a + this.b; } }; var p = Object.create(o); p.a = 1; p.b = 4; console.log(p.f()); // 5 DOM元素; 当this没有传入内联处理函数时,其this指向等同于 函数直接调用的情况,即在非严格模式指向全局对象window, 在严格模式指向undefined; <button onclick=" price) { Product.call(this, name, price); this.category = 'food'; } console.log(new Food('cheese', <em>5</em>) == 'function') { // closest thing possible to the ECMAScript <em>5</em> // internal IsCallable function
在引用公共html页面时,为了便于知道当前所处的页面,我们往往在当前的页面采用特定的样式(如在当前页面的列表中加active class),实现原理是当a 的href的属性与document.location.href一致时在a 所在的列表中增加active class