文章首发: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. EasyUI控件combobox重复请求后台,dialog窗口数据异常

    最近在用Easy UI+Dapper+MVC4 开发一个财务收款系统,其中就发现一些小问题,供有需要的人参考. 1.EasyUI控件combobox 数据绑定 出现重复请求后台 上代码: <td ...

  2. 端口以及服务常用cmd

    netstat -ano                           列出所有端口的情况 netstat -aon|findstr "49157"   查出特定端口的情况 ...

  3. 关于命名空间 namespace的总结

    namespace 有作用的类型  类.函数.常量关键字namespace必须在所有代码之前 除用于编码的declare语句 namespace Myproject; const A = 1; cla ...

  4. jquery选取自定义属性为已知值的元素

    $("div[myattr='value']") //选取自定义myattr属性为value的div

  5. 第七篇 Python面向对象

    类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用,特征被称为属性,行为被称为方法,类就相当于制造飞机时的图纸,是一个模板,是负责创建对象的. 对象是由类创建出来的一个具体存在,可 ...

  6. 「BZOJ 2434」「NOI 2011」阿狸的打字机「AC自动机」

    题意 有一个打字机,支持三种操作: 字符串末尾加一个小写字母 字符串末尾减一个字符 输出这个字符串 经过不超过\(n\)次操作后有\(m\)组询问:\((x,y)\),表示第\(x\)次输出第字符串在 ...

  7. 定时器timer类

    timer类 Timer(定时器)是Thread的派生类,用于在指定时间后调用一个方法. 构造方法: Timer(interval, function, args=[], kwargs={})  in ...

  8. spring boot 第一个Dome

    1.创建Maven项目 按照下面的步骤 项目创建完成后的目录结构 2. 参照Spring boot官方文档修改pom.xml 修改 maven编译的jdk版本 将spring boot设置为 pare ...

  9. 基于SSH协议clone GitHub远端仓库到本地-git

    经常逛 GitHub 的可能都知道,在 clone 远端仓库的时候,会有两个选项,如下图: 首先我们来说明一下两种方式的区别. 使用 HTTPS url 克隆对初学者来说会比较方便,复制HTTPS u ...

  10. P2925 [USACO08DEC]干草出售Hay For Sale 题解

    \(\Huge{dp第一题}\) 题目描述 农民john面临一个很可怕的事实,因为防范失措他存储的所有稻草给澳大利亚蟑螂吃光了,他将面临没有稻草喂养奶牛的局面.在奶牛断粮之前,john拉着他的马车到农 ...