原生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 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
JavaScript XML操作 封装类
Jul 01 Javascript
javascript 年月日联动实现核心代码
Dec 21 Javascript
jquery解析xml字符串示例分享
Mar 25 Javascript
javascript实现添加附件功能的方法
Nov 18 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
解决vue 打包发布去#和页面空白的问题
Sep 04 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
Jul 09 Javascript
JS自定义右键菜单实现代码解析
Jul 16 Javascript
js实现查询商品案例
Jul 22 Javascript
Vue3不支持Filters过滤器的问题
Sep 24 Javascript
springboot+VUE实现登录注册
May 27 Vue.js
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简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
PHP反射学习入门示例
2019/06/14 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
jquery获取radio值实例
2014/10/16 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
基于jQuery实现挂号平台首页源码
2020/01/06 jQuery
vant中的toast轻提示实现代码
2020/11/04 Javascript
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
python3人脸识别的两种方法
2019/04/25 Python
python安装requests库的实例代码
2019/06/25 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
护理专业本科生自荐信
2013/10/01 职场文书
春节联欢会主持词
2014/03/24 职场文书
合同协议书格式
2014/04/18 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
交通事故协议书范文
2014/10/23 职场文书
签订劳动合同通知书
2015/04/16 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python
redis数据一致性的实现示例
2022/03/18 Redis
Python&Matlab实现樱花的绘制
2022/04/07 Python