原生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 相关文章推荐
用document.documentElement取代document.body的原因分析
Nov 12 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
Sep 04 Javascript
js图片自动切换效果处理代码
May 07 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
May 08 Javascript
jquery实现非叠加式的搜索框提示效果
Jan 07 Javascript
AngularJS学习笔记之基本指令(init、repeat)
Jun 16 Javascript
第十篇BootStrap轮播插件使用详解
Jun 21 Javascript
Vue.js组件tabs实现选项卡切换效果
Dec 01 Javascript
js编写简单的计时器功能
Jul 15 Javascript
Angular模板表单校验方法详解
Aug 11 Javascript
浅谈webpack组织模块的原理
Mar 10 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
Sep 21 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中删除变量时unset()和null的区别分析
2011/01/27 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
单链表反转python实现代码示例
2018/02/08 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
python列表的逆序遍历实现
2020/04/20 Python
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
《长江之歌》教学反思
2014/04/17 职场文书
合作意向书
2014/07/30 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
小学感恩节活动总结
2015/03/24 职场文书
公司奖励通知
2015/04/21 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
Python实现滑雪小游戏
2021/09/25 Python