原生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 07 Javascript
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
Feb 07 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
js简单实现标签云效果实例
Aug 06 Javascript
JS动态日期时间的获取方法
Sep 28 Javascript
Node.js中防止错误导致的进程阻塞的方法
Aug 11 Javascript
jQuery中$.grep() 过滤函数 数组过滤
Nov 22 Javascript
Vue.js系列之项目搭建(1)
Jan 03 Javascript
微信小程序新闻网站详情页实例代码
Jan 10 Javascript
微信小程序后端实现授权登录
Feb 24 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
Sep 24 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 has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
php笔记之常用文件操作
2010/10/12 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
express启用https使用小记
2019/05/21 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
python实现批量图片格式转换
2020/06/16 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
运动会邀请函范文
2014/02/06 职场文书
客户接待方案
2014/02/26 职场文书
六查六看六改心得体会
2014/10/14 职场文书
文案策划岗位职责
2015/02/11 职场文书
三八妇女节主持词
2015/07/04 职场文书
病房管理制度范本
2015/08/06 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
mysql创建存储过程及函数详解
2021/12/04 MySQL