前端关于一些this的问题
第一种情况: this它指向的window本身
var sum=10; function fn1() { // 全局变量就是window的属性,而this在这里就是window。 // 因此this.sum就是window.sum,也就是sum全局变量 // console.log(this.sum); } // console.log(this); /*var status=5; console.log(typeof status);*/ fn1();
第二种情况: this它指向事件函数本身
/* * 所有事件函数中的this,都是这个监听事件监听对象 * 在事件函数中this===e.currentTarget也就是事件侦听的对象 * * * */ document.querySelector(".div0").onclick=function (e) { console.log(this); console.log(e.target); console.log(e.currentTarget); };
第三种情况:this它指向对象本身
在对象函数中如果需要调用当前对象的其他函数或者属性时 必须加this.属性名 或者 this.方法名
/* * * 对象中的this * this就是当前这个对象 * 在对象的函数中,如果需要调用当前对象的其他函数或者属性时 * 必须加this.属性名或者this.方法名 * * */ var obj = { a:1, c:function(){ console.log(this.a); } };
ES5和ES6的面向对象
/* * * 下面两种是ES5和ES6的面向对象 * 类中描述的this,都是实例化后的对象 * * * */ // ES5
ES5:
function Box(d) { this.d = d; } Box.prototype = { a: 1, c: function() { //这里的this就是box1 console.log(this.a + this.d); } }; var box1 = new Box(10); box1.c();
ES6:
class Ball { constructor(d) { this.d = d; this.a = 1; } c() { console.log(this.d + this.a); } } var ball1 = new Ball (10); ball1.c();
第四种情况修改替换this的改变——call、apply、bind替换中的this
这里的this就是被替换的对象
/* * * call、apply、bind替换的this * 这里的this就是被替换的对象 * 他们都是用来修改this的指向 *call、apply 基本没什么区别 只不过他们接受的第二个参数有些不同而已 call接受的是单独参数 apply接受的是数组 而bind 通常是给函数修改this指向的 通常我们在react当中会大量的使用.bing的方法来修改this的指向 * */
第五种情况使用箭头函数修改this
要注意的是箭头函数本身是没有this的 它捕获的是上下文的this指向来调用 当你在用箭头函数中使用call、apply、bind 方法是无法改变this的指向的。
this.$nextTick(() => { this.getRecord(); });
上面这个函数是实际vue开发当中遇见的一个bug,然后用了在created中获取不到修改的参数 然而也可以在 mounted(){} ,周期里获取到 就只是想偷个懒。但是尽量的使用对应的周期函数去做组件的该做的事情。 https://blog..net/HarryHY/article/details/99311838 good good study ,day day up