原生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使用手册之二 DOM操作
Mar 24 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
Jan 16 Javascript
JS图像无缝滚动脚本非常好用
Feb 10 Javascript
js动态移动滚动条至底部示例代码
Apr 24 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
Jun 23 Javascript
浅析AngularJS Filter用法
Dec 28 Javascript
微信JS接口大全
Aug 25 Javascript
canvas压缩图片转换成base64格式输出文件流
Mar 09 Javascript
javaScript 逻辑运算符使用技巧整理
May 03 Javascript
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
Jul 26 Javascript
JavaScript展开运算符和剩余运算符的区别详解
Feb 18 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
Node.js文件操作详解
2014/08/16 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
Python提取网页中超链接的方法
2016/09/18 Python
python书籍信息爬虫实例
2018/03/19 Python
Python字符串对象实现原理详解
2019/07/01 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
python实现同一局域网下传输图片
2020/03/20 Python
pymysql模块使用简介与示例
2020/11/17 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
英国景点门票网站:attractiontix
2019/08/27 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
军训自我鉴定
2014/01/22 职场文书
机械个人求职信范文
2014/01/24 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
模具专业自荐信
2014/05/29 职场文书
社会实践活动总结范文
2014/07/03 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
公司开除员工通知
2015/04/22 职场文书
Python序列化与反序列化相关知识总结
2021/06/08 Python
Nginx动静分离配置实现与说明
2022/04/07 Servers