分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

js的this对象相关

发布时间:2023-09-06 02:33责任编辑:郭大石关键词:js
 1 var scope = ‘globe‘ 2 function log() { 3 ????// console.log(this) 4 ????let arg ?= Array.prototype.join.call(arguments, ‘, ‘); 5 ????console.log(`${this.scope}: ${arg}`); 6 } 7 let obj = { 8 ????scope: ‘own‘, 9 ????lop: function() {10 ????????let scope = ‘scope‘;11 ????????log(‘low‘)12 ????}13 }14 obj.lop(); // globe: low15 obj.lop.call(obj); // globe: low16 log.call(obj, ‘create‘) // own: create

如果把var scope= ‘globe’ 为 let scope = ‘globe’,结果就是

obj.lop(); // undefined: low
obj.lop.call(obj); // undefined: low
log.call(obj, ‘create‘) // own: create
 
这里分析一下:
  1. log不是作为对象的方法调用的,所以this指向全局对象wondow(这里不考虑nodejs),所以obj.lop()与obj.lop.call(obj)的结果是一样的
  2. 使用var声明scope时,它会被挂在window上,所以使用this可以取到,但是,使用let时,文件相当于一个模块,有局部作用域,scope就不挂在window上了。
  3. log.call(obj, ‘create‘)使用call绑定this值,所以this指向obj

PS: 绑定this方法: call 参数是分开的,apply 参数是数组,bind 绑定this后修改this就没有作用了。

js的this对象相关

原文地址:https://www.cnblogs.com/wangtingnoblog/p/10408931.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved