原生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 相关文章推荐
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
jQuery简单动画变换效果实例分析
Jul 04 Javascript
js实现浏览器倒计时跳转页面效果
Aug 12 Javascript
AngularJS通过$sce输出html的方法
Sep 22 Javascript
javascript轮播图算法
Oct 21 Javascript
jquery dialog获取焦点的方法
Feb 09 Javascript
js中的事件委托或是事件代理使用详解
Jun 23 Javascript
Vue 2.0的数据依赖实现原理代码简析
Jul 10 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
Jul 11 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
Sep 16 Javascript
带你使用webpack快速构建web项目的方法
Nov 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
封装一个PDO数据库操作类代码
2009/09/09 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
试用php中oci8扩展
2015/06/18 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
jQuery的学习步骤
2011/02/23 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
前端性能优化建议
2020/09/17 Javascript
python Django框架实现自定义表单提交
2016/03/25 Python
python 全文检索引擎详解
2017/04/25 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
初中同学聚会邀请函
2014/02/03 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
法人授权委托书格式
2014/04/08 职场文书
心理健康活动总结
2014/04/30 职场文书
公司联欢会策划方案
2014/05/19 职场文书
个人求职信格式范文
2015/03/20 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python