this 的指向与所在方法的调用位置有关,而与方法的声明位置无关

 var obj = {
val: 1,
getVal: function() {
console.log(this.val);
}
}
var obj1 = {
val: 2,
getVal: obj.getVal //相当于obj中的getVal被复制了一份放在obj1中,并给了它的属性getVal
}
obj.getVal(); //
obj1.getVal(); //

在浏览器中,调用方法没有明确对象的,this指向window

 var obj = {
val: 1,
getVal: function() {
console.log(this.val);
}
}
var val = 3;
var getVal = obj.getVal;
getVal(); // 在node环境是undefined(node全局对象是global) 在浏览器中是3(浏览器全局对象是window)
  1 var obj = {
2 val: 1,
3 getVal: function() {
4 console.log(this.val);
5 }
6 }
7 var obj1 = {
8 val: 2,
9 getVal: function() {
10 var getVal = obj.getVal; //相当于obj中的getVal被复制了一份放在obj1中,并给了它的属性getVal
11 getVal();
12 }
13
14 }
15 var val = 34;
16 obj1.getVal(); //实际上是在这调用的 (在node环境是undefined(node全局对象是global) 在浏览器中是34(浏览器全局对象是window))

在浏览器中setTimeout,setInterval和匿名函数执行的时的当前对象是全局对象window

 var that = this;

 (function() {
console.log(this === that); // 在浏览器中是true 在node是false
})(); setTimeout(function() {
console.log(this === that); // 在浏览器中是true 在node是true
}, 0);

如果js中定义的全局对象在浏览器中是执行window,会加入window中的一个同名属性,但是在node中就一定加到global中了吗,并不是,在node 中是有个global全局作用域,但是除非你指名加到global上,global上面才会有,否则不会有,node的多有文件也不会访问到这个属性,node其实是有文件作用域的,把变量定义在文件中,其他文件是不会共享这个变量的。这是和浏览器的window是不同的哦

applay/call/bind能够强制改变函数执行时的当前对象,让this指向其他对象

var obj = {
val: 1,
getVal: function() {
console.log(this.val);
}
}
var obj1 = {
val: 2
}
var val = 34;
// 调用位置
obj.getVal.call(); //node下是undefined //浏览器下是34 不传值默认是全局对象
obj.getVal.call(obj1); //2
obj.getVal.apply(); //node下是undefined //浏览器下是34 不传值默认是全局对象
obj.getVal.apply(obj1); //
obj.getVal.bind(this)(); //node下是undefined //浏览器下是34
obj.getVal.bind(obj1)(); //

严格模式下  this不会被赋值到window下  而是undefined

 (function() {
'use strict'; function getVal() {
console.log(this);
} console.log(this); // undefined
getVal.call(this); // undefined
getVal.call(null); // null
getVal.call(undefined); // undefined
})();

this 相关(2)的更多相关文章

  1. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  2. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  3. SQL Server相关书籍

    SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...

  4. dotNET跨平台相关文档整理

    一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...

  5. 在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?

    HostingEnvironment是承载应用当前执行环境的描述,它是对所有实现了IHostingEnvironment接口的所有类型以及对应对象的统称.如下面的代码片段所示,一个HostingEnv ...

  6. virtualbox linux虚拟机相关

    linux虚拟机设置为静态IP 在virtualbox中安装好linux虚拟机后,如果采用的是NAT方式的话,linux虚拟机默认采用dhcp方式自动上网,而且用的是NetworkManager服务而 ...

  7. WebGIS中等值面展示的相关方案简析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 等值面是气象.环保等相关项目上常用到的效果展示.在传统的CS项 ...

  8. .NET同步与异步之相关背景知识(六)

    在之前的五篇随笔中,已经介绍了.NET 类库中实现并行的常见方式及其基本用法,当然.这些基本用法远远不能覆盖所有,也只能作为一个引子出现在这里.以下是前五篇随笔的目录: .NET 同步与异步之封装成T ...

  9. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

  10. mysql 5.7中的用户权限分配相关解读!

    这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...

随机推荐

  1. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统

    使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...

  2. ionic3 隐藏子页面tabs

    看了几天ionic3 问题还挺多的,今天想把所有子页面tabs 给去掉,整了半天,发现app.Module 是可以配置的 修改 IonicModule.forRoot(MyApp) imports: ...

  3. 【ssh】端口转发

    来源:https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 非常非常好用,可以通过跳板解决两台服务器无法连接的问题 第一部分 概述 ...

  4. Software tips

    1.Microsoft office professional plus 2013秘钥 PD3W7-NVGG7-YKGQX-7CRDG-J2MG7(test success)MTGRC-8BM6H-W ...

  5. tensorflow(1) 基础: 神经网络基本框架

    1.tensorflow 的计算得到的是计算图graph import tensorflow as tf a=tf.constant([1.0,2.0]) b=tf.constant([3.0,4.0 ...

  6. bzoj1195 神奇的ac自动机+状态压缩dp

    /* 难的不是ac自动机,是状态压缩dp 之前做了一两题类似题目,感觉理解的还不够透彻 */ #include<iostream> #include<cstdio> #incl ...

  7. 如何在地址栏(title标签里)和收藏夹里 加上网站的标志ICO、LOGO图片

    第一步:首先你必须要制作一个看起来既清楚又容易辨识的.ico格式的小图片. 我们将图标的大小定义为16x16 像素.此外在制作图形文件的时候,你可能需要把色盘设定成只使用标准的 16 色 Window ...

  8. linux更好看的top界面htop

    top命令界面 性能测试时会经常用到top命令百用百顺就是样式不太美,下面介绍htop一个看起来更漂亮的top界面 安装htop yum install htop 安装完成键入htop命令,这样看起来 ...

  9. 部署MySQL5.7时的权限问题

    本周部署MySQL5.7的时候遇到这样的问题,在初始化的时候,总是失败,并且报错: 2019-01-09T09:47:13.957685Z 0 [ERROR] InnoDB: Operating sy ...

  10. jmeter BeanShell实例-----两个变量之间的断言对比

    jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...