原生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 相关文章推荐
JavaScript中清空数组的三种方法分享
Apr 07 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
Dec 17 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
Jun 09 Javascript
JS正则表达式判断有效数实例代码
Mar 13 Javascript
js中作用域的实例解析
Mar 16 Javascript
JS简单添加元素新节点的方法示例
Feb 10 Javascript
js+canvas实现滑动拼图验证码功能
Mar 26 Javascript
JS实现将二维数组转为json格式字符串操作示例
Jul 12 Javascript
深入理解Vue 组件之间传值
Aug 16 Javascript
Node+OCR实现图像文字识别功能
Nov 26 Javascript
layui动态表头的实现代码
Aug 22 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
谈一谈收音机的高放电路
2021/03/02 无线电
PHP与SQL注入攻击[一]
2007/04/17 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
php unlink()函数使用教程
2018/07/12 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
python进程管理工具supervisor使用实例
2014/09/17 Python
Python实现线程池代码分享
2015/06/21 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
windows支持哪个版本的python
2020/07/03 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
简历中个人自我评价范文
2013/12/26 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
公司授权委托书范文
2014/08/02 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
八达岭长城导游词
2015/01/30 职场文书
介绍信样本
2015/01/31 职场文书
迎新年主持词
2015/07/06 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server