原生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 相关文章推荐
javascript 写的一个简单的timer
Jul 30 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
Jul 04 Javascript
js实现多选项切换导航菜单的方法
Feb 06 Javascript
javascript单例模式的简单实现方法
Jul 25 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
原生js实现addclass,removeclass,toggleclasss实例
Nov 24 Javascript
JS中将多个逗号替换为一个逗号的实现代码
Jun 23 Javascript
jquery ajaxfileupload异步上传插件
Nov 21 jQuery
ES6中字符串的使用方法扩展
Jun 04 Javascript
vue-cli设置css不生效的解决方法
Feb 07 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
Aug 17 Javascript
js观察者模式的弹幕案例
Nov 23 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
实现前后端数据交互方法汇总
2015/04/07 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
gulp解决跨域的配置文件问题
2017/06/08 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
深入理解Python 代码优化详解
2014/10/27 Python
python多线程方式执行多个bat代码
2016/06/07 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
医学院毕业生自荐信范文
2014/03/06 职场文书
婚前协议书标准版
2014/10/19 职场文书
营销计划书
2015/01/17 职场文书
会议通知格式范文
2015/04/15 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
Python first-order-model实现让照片动起来
2022/06/25 Python