最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

js中的this如何使用

来源:动视网 责编:小采 时间:2020-11-27 20:11:13
文档

js中的this如何使用

js中的this如何使用:js中的this到底是什么意思JS里面总是会用到this,今天就和大家好好的谈一下这个容易把人弄糊涂的this到底是个什么东西,怎样使用thisthis的指向1, 普通函数指向函数的调用者:有个简便的方法就是看函数前面有没有点,如果有点,那么就指向点前面的那个值;2,
推荐度:
导读js中的this如何使用:js中的this到底是什么意思JS里面总是会用到this,今天就和大家好好的谈一下这个容易把人弄糊涂的this到底是个什么东西,怎样使用thisthis的指向1, 普通函数指向函数的调用者:有个简便的方法就是看函数前面有没有点,如果有点,那么就指向点前面的那个值;2,


js中的this到底是什么意思

JS里面总是会用到this,今天就和大家好好的谈一下这个容易把人弄糊涂的this到底是个什么东西,怎样使用this

this的指向1, 普通函数指向函数的调用者:有个简便的方法就是看函数前面有没有点,如果有点,那么就指向点前面的那个值;2, 箭头函数指向函数所在的所用域: 注意理解作用域,只有函数的{}构成作用域,对象的{}以及 if(){}都不构成作用域;

const obj = {
name: 'objName',
say() {
console.log(this.name); 
 }, 
read: () => {
 console.log(this.name);
 }
 }
obj.say(); // objName
obj.read(); // undefined

普通函数,调用者是obj,所以结果是 objname;也是理解say()是普通函数,前面有点,所以this指向obj;

箭头函数,this指向函数所在的作用域,当前的作用域为全局环境,所以this.name为undefined,

举下面的例子更清楚的了解一下箭头函数this的指向,箭头函数所在的作用域是普通函数say,say()的调用者是obj

const obj = { 
say: function () {
 setTimeout(() => {
 console.log(this)
 });
 }
 }

obj.say(); // obj,此时this指的是定义他的obj

补充知识点

浏览器默认的this为window

function test() { 
console.log(this);
}

test(); //window

node.js中全局环境默认this为{},普通函数中默认this为global

console.log(this); // {}
function test() {
 console.log(this);
}
test(); //global

来两道题检查你是否掌握了

example1

const length = 10;
function fn() {
console.log(this.length);
}
const obj = {
 length: 5,
 method: function(fn) { 
 fn();
 arguments[0](); 
 }
};
obj.method(fn, 1);

输出 10, 2

刚开始看到这道题我也是蒙蒙的,现在也终于理解了,method这个函数传入了两个参数,一个参数为fn(),fn()为普通函数,this指向函数的调用者,此时指向全局(也可以看这个函数前面没有点),所以运行结果为10,arguments是函数的所有参数,是一个类数组的对象,arguments[0] (),可以看成是arguments.0(),调用这个函数的是arguments,此时this就是指arguments,this.length就是angument.length,就是传入的参数的总个数2

注: 上面例子在node环境中的运行结果为 undefined 2, const length = 10改成global.length = 10;是因为node环境下定义在全局的变量不会绑定到global,浏览器也会自动绑定到全局环境window

改成下面这样结果又是什么呢?

const length = 10;
function fn() {
 console.log(this.length);
}
const obj = {
 length: 5,
 method: function(fn) {
 fn();
 const fun = arguments[0];
 fun();
 }
};
obj.method(fn, 1);
10, 10
example 2
window.val = 1;
var obj = {
 val: 2,
 dbl: function() {
 this.val *= 2
 val *= 2;
 console.log(val);
 console.log(this.val);
 }
}
obj.dbl(); // 2 4
var func = obj.dbl;
func(); // 8 8

这个就是有点绕了,不过一步步来分析就很容易理解了:

obj.dbl();执行这行代码时,this指的是obj,所以this.val === obj.val*=2,最后结果为4,val*=2 === window.val *= 2,最后结果是2

func(),执行这行代码时,func()没有任何前缀,this指的是window.func();所以此时this值得是window,this.val === window.val *= 2,此时window.val 为4,val*=2 === window.val *2,最后结果为8,最后console.log(this.val),与console.log(val),指的都是window.val。

文档

js中的this如何使用

js中的this如何使用:js中的this到底是什么意思JS里面总是会用到this,今天就和大家好好的谈一下这个容易把人弄糊涂的this到底是个什么东西,怎样使用thisthis的指向1, 普通函数指向函数的调用者:有个简便的方法就是看函数前面有没有点,如果有点,那么就指向点前面的那个值;2,
推荐度:
标签: 使用 用法 this
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top