文章首发:http://www.cnblogs.com/sprying/p/3573456.html

使用this的几种场合

1. 执行函数时,判断函数是对象方法还是一个单独的函数?单独的函数this===window;
对象方法,this == 对象。

function UseThis(){
console.log(this === window);
this.instancePro = 1;
}
UseThis.objPro = 2;
UseThis.objMethod = function(){
console.log(this.objPro);
}
UseThis();//true 不管嵌套多深,执行函数时,函数内的this === window
console.log(instancePro);// var useThis = new UseThis();//false 当前是A是个构造函数,构造函数内的this,是new创建的实例
console.log(useThis.instancePro);// UseThis.objMethod();//2 当前函数是对象方法,this===UseThis
var fn = UseThis.objMethod;
fn();//undefined

打开测试页面,启动调试器

2. 函数由bind方法返回后,this指向bind的第一个参数。

3. 通过call(apply)执行函数,this指向call(apply)的第一个参数。

/*函数两次调用call*/
function doubleBind() {
  console.log(this.doubleVariable);
}
(function () {
  console.log(this.doubleCalendar);//
  doubleBind.call({doubleVariable: 1});//
}).call({doubleVariable: 2});

4. 一个函数,先调用bind,再使用call执行时,this指向bind的第一个参数。

/*由函数Bind绑定返回函数再调用call*/
function funBind() {
console.log(this.pro);
}
var relFun = funBind.bind({pro: 2});
relFun.call({pro: 3});//

出道题

var con_inObj = {
variable :"sprying",
cons_fun:function(){
console.log(this.variable);
}
}
var new_obj = new con_inObj.cons_fun();//? <!-- from 前端乱炖 -->
var x = 5;
var example = {
x: 100,
a: function () {
var x = 200;
console.log('a context: %s, var x = %s', this.x, x);
},
b: function () {
var x = 300;
return function () {
var x = 400;
console.log('b context: %s, var x = %s', this.x, x);
};
},
c: function () {
var other = {
x: 500
};
var execB = this.b().bind(other);
execB();
return execB;
}
}
console.log('example.x:' + example.x);
example.a();
example.b()();
example.a.call({
x: 9999
}); var execB = example.c();
execB.call({
x: 9999
});

想知道结果的同学,点击链接,打开调试器

诠释JavaScript中的this的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  3. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

  4. javascript中的操作符详解1

    好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...

  5. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

  6. javascript中变量提升的理解

    网上找了两个经典的例子 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); // 10 var ...

  7. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  8. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  9. Javascript中的valueOf与toString

    基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. t ...

随机推荐

  1. svn下载安装

    TortoiseSVN 下载地址:http://subversion.apache.org/packages.html#windows VisualSVN Server 下载地址:https://ww ...

  2. [python]模块及包

    一 .module 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc&quo ...

  3. TCP连接状态-如何判断一个TCP连接是否可用

    在使用一个长连接的TCP时,如果TCP服务器端接收到TCP的客户端连接过来后,接着服务器端的TCP节点需要对这个客户端进行数据收发,收发时需要判断这个SOCKET是否可用用,判断方法有多种: 1.li ...

  4. golang 重构博客统计服务

    欢迎关注楼主与他的小伙伴们的小站,每周分享一些技术文章,让我们在技术上一起成长------> 戳这里,欢迎光临小站 -_- 作为一个后端开发,在docker,etcd,k8s等新技术不断涌现的今 ...

  5. Jquery的动画

    $下载链接详情点击Jquery-day01查看官方网站下载地址 Jquery-day02 1.Jquery动画使用animate-(JQ-2.1) <!DOCTYPE html> < ...

  6. day1学python Hello Python

    Hello Python 本人使用的是Pycharm编译器 ----------------------------------------------- 1.输出 2.赋值 3.‘’‘/“”“ 多行 ...

  7. leecode刷题(6)-- 两个数组的交集II

    leecode刷题(6)-- 两个数组的交集II 两个数组的交集II 描述: 给定两个数组,编写一个函数来计算它们的交集. 示例: 输入: nums1 = [1,2,2,1], nums2 = [2, ...

  8. 【ARC075F】Mirrored 搜索/数位dp

    Description ​ 给定正整数DD,求有多少个正整数NN,满足rev(N)=N+Drev(N)=N+D,其中rev(N)rev(N)表示将NN的十进制表示翻转来读得到的数 Input ​ 一个 ...

  9. 八大排序算法的python实现(八)简单选择排序

    代码: #coding:utf-8 #author:徐卜灵 # L = [6, 3, 2, 32, 5, 4] def Select_sort(L): for i in range(0,len(L)) ...

  10. 1.Java 程序工作原理

    JVM:JAVA虚拟机,java程序运行在jvm上,jvm是java程序的运行环境. java程序的平台无关性:java编写的程序(.java)经过编译器变异成字节码文件(.class).这个字节码文 ...