原生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 相关文章推荐
11款基于Javascript的文件管理器
Oct 25 Javascript
基于JQuery的简单实现折叠菜单代码
Sep 15 Javascript
javascript AOP 实现ajax回调函数使用比较方便
Nov 20 Javascript
JavaScript学习笔记(二) js对象
Oct 25 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
在JavaScript中重写jQuery对象的方法实例教程
Aug 25 Javascript
JavaScript中判断原生函数检查function是否是原生代码
Sep 09 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
TypeScript类型声明书写详解
Aug 28 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
Nov 07 jQuery
Vue 解决路由过渡动画抖动问题(实例详解)
Jan 05 Javascript
JQuery表单元素取值赋值方法总结
May 12 jQuery
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实现图象锐化代码
2007/06/14 PHP
Ajax PHP简单入门教程代码
2008/04/25 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
Python 操作MySQL详解及实例
2017/04/30 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
Python中按值来获取指定的键
2019/03/04 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
在pycharm中实现删除bookmark
2020/02/14 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
python实现简单井字棋小游戏
2020/03/05 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
经典c++面试题四
2015/05/14 面试题
节约用水标语
2014/06/11 职场文书
工作证明格式及范本
2014/09/12 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL