当前位置: 首页 > news >正文

简单快速理解js中的this、call和apply

注:本文案例环境为非严格模式,严格模式下禁止关键字this指向全局对象

一、方法是怎么执行的?

首先说一下js中方法的执行,在window全局下声明一个方法a:

function a () {
  console.log(this);
}
a();//window

全局中执行这个方法普遍的方法是直接a(),这个方法的执行环境是window,控制台会打印出window对象。

那么为什么会打印出window对象呢?我们可以这样理解,方法的执行必须要有个直接调用者,刚才那个方法a是定义在window全局下的,window下的变量和方法有个特点就是访问和调用的时候可以省略window!所以刚才执行a() === window.a(),也就是说,执行a方法时的直接调用者是window。!

上面有提到直接调用者,怎么看待这个直接调用者呢?举个例子,声明一个全局对象obj:

var name = "window-name";
var obj = {
    name:"obj-name",
    a:function(){
        console.log(this.name);
    },
    b:{
        name:"b-name",
        a:function(){
            console.log(this.name);
        }
    }
}
obj.a();//obj-name
obj.b.a();//b-name

分别执行obj.a();

相关文章:

  • 点击按钮,让页面滚动到指定位置的方法
  • 类数组转化为真实的数组
  • WebStorm设置编辑器背景图片
  • 前端跳槽潮中面试官希望看到什么亮点?
  • 使用lighthouse分析你的网站性能
  • CSS选择器之兄弟选择器(~和+)
  • JS实现字符串翻转的方法分析
  • js 函数重载
  • 从两个角度理解为什么 JS 中没有函数重载
  • Promise.all和Promise.race区别,和使用场景
  • js 判断当前时间是否处于某个时间段内
  • 请描述一下 cookies,sessionStorage 和 localStorage 的区别
  • node -v没有作用
  • edited
  • 笔记本尺寸
  • 《剑指offer》分解让复杂问题更简单
  • Android组件 - 收藏集 - 掘金
  • Github访问慢解决办法
  • HTTP请求重发
  • leetcode46 Permutation 排列组合
  • mongo索引构建
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • nginx 负载服务器优化
  • Promise初体验
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Web设计流程优化:网页效果图设计新思路
  • 复杂数据处理
  • 前端之Sass/Scss实战笔记
  • 一文看透浏览器架构
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 阿里云服务器购买完整流程
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Linux(make工具和makefile文件以及makefile语法)
  • #Linux(权限管理)
  • #NOIP 2014# day.2 T2 寻找道路
  • #pragma multi_compile #pragma shader_feature
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (论文阅读11/100)Fast R-CNN
  • (南京观海微电子)——COF介绍
  • (十六)串口UART
  • (一)WLAN定义和基本架构转
  • (转)EXC_BREAKPOINT僵尸错误
  • ******IT公司面试题汇总+优秀技术博客汇总
  • /*在DataTable中更新、删除数据*/
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [C++]Leetcode17电话号码的字母组合