常见:在普通函数中的this,指向 全局

function thisObj(name){
this.name = name;
console.log(this);
}

但是在严格模式下的函数,this指向 underfined.

混淆点.内部函数中的this指向:

var numbers = {
numberA: 5,
numberB: 10,
sum: function() {
console.log(this === numbers); // => true
function calculate() {
// this is window or undefined in strict mode
console.log(this === window); // => true
console.log(this === numbers); // => false;
return this.numberA + this.numberB;
};
return calculate();
}
};
numbers.sum();

在上述numbers对象中,sum函数是numbers对象的方法。所以sum函数中的this指向numbers对象。

但是在内部函数calculate中,我们如果以为this也是指向numbers对象那就打错特错了。

在这里该内部对象是一个函数调用,并不是对象的方法。所以calculate中的this指向 window。

所以为了避免calculate中的this指向错误。要进行如下修改,将this值指向numbers对象。

var numbers = {
numberA: 5,
numberB: 10,
sum: function() {
console.log(this === numbers); // => true
function calculate() {
// this is window or undefined in strict mode
console.log(this === window); // => true
console.log(this === numbers); // => false;
return this.numberA + this.numberB;
};
return calculate.call(this);//return calculate();
}
};
numbers.sum();

混淆点.从Object中分离的方法

function People(name){
this.name = name;
this.action = function(){
console.log("this是否等于window " + this === window)
console.log(this.name)
}
}
var xiaoA = new People('xyf');
var zz = xiaoA.action;
zz(); //输出错误
xiaoA.action() // 输出 xyf
setInterval(xiaoA.action,500000);//错误
setInterval(xiaoA.action.bind(xiaoA),500000);//循环输出 xyf
这里要注意  如果直接输出 xiaoA.action();是可以正确输出的。但是当我们将xiaoA.action赋值给变量zz之后。该action方法就从原来的Object中分离了。这时候的this指向全局变量。setInterval定时器也会产生这样的问题。如果要正确显示需要用bind重新绑定对象。
var zz =xiaoA.action.bind(xiaoA);
zz(); //输出 xyf

apply调用

apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。apply()的参数为空时,默认调用全局对象。

js中关于this的理解的更多相关文章

  1. JS中对于prototype的理解

    JS中的prototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  2. 关于js中this指向的理解总结!

    关于js中this指向的理解! this是什么?定义:this是包含它的函数作为方法被调用时所属的对象. 首先,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁 ...

  3. js中两个!!的理解

    在js中经常有两个!!出现,经常让人难以理解 (function () { var a = 10; var b = 20; function add(num1, num2) { var num1 = ...

  4. 【JS】JS中对于this的理解

    一.对this的产生原因分析和了解 第一:this指的是函数运行时所在的环境(即调用的对象). 第二:JavaScript 语言之所以有this的设计,跟内存里面的数据结构有关系(内存存储详细理解参考 ...

  5. JS中原型链的理解

    new操作符具体干了什么呢?其实很简单,就干了三件事情. var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj); 第一行,我们创建了 ...

  6. Js中函数式编程的理解

    函数式编程的理解 函数式编程是一种编程范式,可以理解为是利用函数把运算过程封装起来,通过组合各种函数来计算结果.函数式编程与命令式编程最大的不同其实在于,函数式编程关心数据的映射,命令式编程关心解决问 ...

  7. js中的this怎么理解

    本博客供自己学习备忘, js中的this感觉很混乱,目前还有不少地方搞得不是很清楚,看到一篇不错的文章,先摘下来 this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象 ...

  8. js中boolean类型的理解

    <html> <head> <script type="text/javascript"> var x="12"; aler ...

  9. node.js中module模块的理解

    node.js中使用CommonJS规范实现模块功能,一个单独的文件就是一个单独的模块.通过require方法实现模块间的依赖管理. 通过require加载模块,是同步操作. 加载流程如下: 1.找到 ...

  10. [前端] js中call方法的理解和思考

    最近接手前端的工作,对当前项目中自制的js框架下,js的使用产生了非常多的困惑.尤其是js的类,对象,函数,this等等相互之间的关系和转换,以前学过也忘得差不多了,现在基本相当于重新看. js中的函 ...

随机推荐

  1. 通达OA二次开发 工作流表单中关联查询另外一个工作流方法(源代码)

    一个工作流表单中,怎样方便的查询相关的工作流表单内容.重复打开各个菜单必定须要造成多次点击浪费时间,切换也会带来思路的中断.这里通过js代码的方式把这个问题进行了解决. <style>&l ...

  2. 最短路Dijkstra算法的一些扩展问题

    最短路Dijkstra算法的一些扩展问题     很早以前写过关于A*求k短路的文章,那时候还不明白为什么还可以把所有点重复的放入堆中,只知道那样求出来的就是对的.知其然不知其所以然是件容易引发伤痛的 ...

  3. UIProgress控件的属性和方法

    进度条控件是IOS开发中一个简单的系统控件,使用总结如下: 初始化一个进度条: - (instancetype)initWithProgressViewStyle:(UIProgressViewSty ...

  4. IntelliJ IDEA 2017 反向代理工具新方法激活

    来源:http://blog.lanyus.com/archives/317.html 反向代理工具, 可用于激活JRebel  (win64) 1.点击进入 https://github.com/i ...

  5. COGS-2049 疯狂动物城

    Description 你意外来到了一个未知的星球, 这里是一个动物乌托邦, 生活着一群拥有非凡智力的动物. 你遇到了一个叫做尼克的狐狸, 他准备给他的 GF 过生日 . 他将制作一个巨大的多层蛋糕, ...

  6. 「NOIP2014」「LuoguP2296」 寻找道路

    Description 在有向图 G 中,每条边的长度均为 1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在 ...

  7. kvm_虚拟机迁移

    virsh domblklist 虚拟机名称 #查看虚拟磁盘文件 一.kvm虚拟机静态迁移 1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚 ...

  8. Sublime text 安装Package Control

    Package Control 插件是一个方便 Sublime text 管理插件的插件,但因为 Sublime Text 3 更新了 Python 的函数,API不同了,导致基于 Python 开发 ...

  9. View Controller Programming Guide for iOS---(六)---Responding to Display-Related Notifications

    Responding to Display-Related Notifications 响应跟显示相关的通知 When the visibility of a view controller’s vi ...

  10. bash 脚本编程七 将命令输出保存到变量中(转载)

    转自:http://blog.csdn.net/csfreebird/article/details/7978699 `符号包含的命令执行完后,可以讲其输出结果保存到变量中 #!/bin/bash v ...