原生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 相关文章推荐
许愿墙中用到的函数
Oct 07 Javascript
js DOM模型操作
Dec 28 Javascript
jquery下操作HTML控件的实现代码
Jan 12 Javascript
JavaScript window.document的属性、方法和事件小结
Oct 24 Javascript
JavaScript图片轮播代码分享
Jul 31 Javascript
js正则表达式replace替换变量方法
May 21 Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 Javascript
Three.js的使用及绘制基础3D图形详解
Apr 27 Javascript
Vue单文件组件基础模板小结
Aug 10 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
Jul 13 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
Jan 18 jQuery
JavaScript中的this基本问题实例小结
Mar 09 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
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
浅说js变量
2011/05/25 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Python中的pack和unpack的使用
2018/03/12 Python
python如何求解两数的最大公约数
2018/09/27 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
Python 音频生成器的实现示例
2019/12/24 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
python实现猜数游戏
2020/03/27 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
Python如何读写二进制数组数据
2020/08/01 Python
物理教育专业毕业生推荐信
2013/11/03 职场文书
我的求职计划书
2014/01/10 职场文书
商场主管竞聘书
2014/03/31 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
办公室岗位职责
2015/02/04 职场文书
清洁工岗位职责
2015/02/13 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python