原生javascript中this几种常见用法总结


Posted in Javascript onFebruary 24, 2020

本文实例讲述了原生javascript中this几种常见用法。分享给大家供大家参考,具体如下:

this的应用  “是”  代名词

this必须出现在函数里面

//------------------默认绑定
function test (){
  console.log(this.a);//1
}
var a = 1;
test();

this取得是window的对象a;此处默认window

//---------------------隐士绑定?
function test (){
  console.log(this.a);//2
}
var foo = {
  a:2,
  f:test
}
var a = 1;
foo.f();

此处this取得是foo对象的a;

//---------------------隐士绑定 多层调用链?
function test (){
  console.log(this.a);//3
}
var foo = {
  a:3,
  f:test
}
var foo2 = {
  a:4,
  f:foo
}
var a = 1;
foo2.f.f();

此处this取得是foo对象的a,foo2中只起到调用foo,所以thisl指的还是foo;

//---------------------隐士绑定 (隐士丢失) 多层调用链?
function test (){
  console.log(this.a);//1
}
var foo = {
  a:2,
  f:test
}
var a = 1;
var fun = foo.f;
fun();

由于是赋值  调用的是fun(),foo.f 是取函数,但是this的对象是fun,是window对象,所以只能取得全局变量a

//1,this所在的函数是事件处理函数,那么this就是事件源;
var btns = document.getElementsByTagName("button");
获取所有button
for(var i = 0; i < btns.length;i++){
  btns[i].onclick = function(){
    this代表当前事件源
    console.log(this)
  }
}
// 2、this所在函数是构造函数,那么this就是new的对象,并且会生成__proto__属性。
function func(name,age){
  this.name = name;
  this.age = age;
  // console.log(this)
}
let f = new func("z",20);
// 3、this所在函数是类的方法,那么this就是调用方法时的对象
function Fnc(name,age){
  this.name = name;
  this.age = age;
}
Fnc.prototype.eat = function(){
  console.log(this);
}
let fn = new Fnc("a",12);
fn.eat();
let fn2 = new Fnc("b",10);
fn2.eat();
// 4、this的转移 转移到window
var btns = document.getElementsByTagName("button");
//获取所有button
for(let i = 0; i < btns.length;i++){
  btns[i].onclick = function(){
    console.log(this)
    // this代表点击事件源
    setTimeout(function(){
      console.log(this);
      // this代表window对象 发生了转移
    },30)
  }
}
/*
以上所说的所在函数,重点看关键字function。不会受箭头函数的影响
JavaScript中的一切的一切都属于window对象。window对象可以省略。
所有的全部变量,函数,类,都属于window对象。
this的转移:发生在闭包里。*/

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JS实现打开本地文件或文件夹
Mar 09 Javascript
判断控件是否已加载完成的代码
Feb 24 Javascript
location.href语句与火狐不兼容的问题
Jul 04 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
Jan 22 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
May 23 Javascript
第九章之路径分页标签与徽章组件
Apr 25 Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 Javascript
JS控制FileUpload的上传文件类型实例代码
Oct 07 Javascript
js实现时间轴自动排列效果
Mar 09 Javascript
vue.js实现简单轮播图效果
Oct 10 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
vue项目中将element-ui table表格写成组件的实现代码
Jun 12 Javascript
js实现坦克大战游戏
Feb 24 #Javascript
Vue中点击active并第一个默认选中功能的实现
Feb 24 #Javascript
如何在JavaScript中创建具有多个空格的字符串?
Feb 23 #Javascript
浅谈TypeScript的类型保护机制
Feb 23 #Javascript
原生javascript制作的拼图游戏实现方法详解
Feb 23 #Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
Feb 23 #Javascript
es6中Promise 对象基本功能与用法实例分析
Feb 23 #Javascript
You might like
PHP生成带有雪花背景的验证码
2008/09/28 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
php数组转成json格式的方法
2015/03/09 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
JavaScript实现密码强度实时验证
2020/03/18 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
Python2.x与Python3.x的区别
2016/01/14 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
刘胡兰的英雄事迹材料
2014/02/11 职场文书
美术教师自我鉴定
2014/02/12 职场文书
质量承诺书怎么写
2014/05/24 职场文书
研究生个人学年总结
2015/02/14 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
升学宴学生致辞
2015/09/29 职场文书
宣传委员竞选稿
2015/11/19 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python
Pandas搭配lambda组合使用详解
2022/01/22 Python