写在前头: 本站内容为个人学习记录,纯属个人观点,不喜勿喷,欢迎指正!

笔记记录缘由:JavaScript的流行趋势已经势不可挡,衍生的AngularJs,Node.js,BootStrmp中小企业的后端开发越来越没有优势,IT不是一个可以完全靠经验说话的岗位,IT改变生活,作为一个三年的.Net程序员现在深深的感受到守旧其实就是害怕,躲避时代的进度,人生需要激情,需要动力!

正文:

一、apply().call(),bind()是做什么的?

这三个都是改变方法中this指向的

二、this是什么东西?

this指你当前调用的方法的执行对象,例如setTimeout方法的this

 setTimeout(function(){
console.log(this)
},1000)

输出结果:

Window {external: Object, chrome: Object, document: document, Alax: Object, a2: Object…}

因为setTimeout的完全调用时Window.setTimeout  它属于Window对象的一个方法。

再定义一个对象

var Alax={
name:'Alax',
age:27,
fuc:function(){ return this.age;
}
}

按理说使用console.log(Alax.fun)应该输出的27但实际情况是undefined,这是为什么呢?因为在Alax对象外调用时实际的作用对象时Window,而Window是不包含age属性的,也就是说this指向改变了需要重新指定,此处先记着等讲完概念在对比你心中所想

三、call,apple,bind三者的区别

1.  参数对比

call的参数格式是(thisvalue,arg1)

apply的是(thisvalue,[arg1,ar2...])

bind的参数格式是(thisvalue,arg1,ar2...)

thisvalue指的是要传递的this指向,后面的参数是非必输跟方法的参数一一对应,传入了都可以用arguments获取

2.返回结果对比

call和apple指将所有参数传递到arugements,并直接返回调用结果

bind指将返回一个传入值在方法运行后返回一个新的函数 需要加上()调用

  总结:上面的调用方式可以是

console.log((Alax.fuc).call(Alax))
console.log((Alax.fuc).apply(Alax))
console.log((Alax.fuc).bind(Alax)())

附上参数调用

Alax={
name:'Alax',
age:27,
fuc:function(num){
this.age+=num
return this.age;
}
}
console.log((Alax.fuc).call(Alax,1))
console.log((Alax.fuc).apply(Alax,[1]))
console.log((Alax.fuc).bind(Alax)(1))

JavaScirpt的this指向 apply().call(),bind()个人笔记的更多相关文章

  1. JS 中的this指向问题和call、apply、bind的区别

    this的指向问题 一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window. function a(){ console.log(this); //输出函数a中的th ...

  2. 作用域链和函数内部this指向问题以及bind、call、apply方法

    作用域链和函数内部this指向问题以及bind.call.apply方法 作用域链 作用域是相对于变量而言的, 其意义就在与查找变量(确定变量的来处, 变量是否可以访问到, 确定变量在当前位置是否可以 ...

  3. js中改变this指向的call、apply、bind 方法使用

    前言: 由于js 中this的指向受函数运行环境的影响,指向经常改变,使得开发变得困难和模糊,所以在封装sdk,写一些复杂函数的时候经常会用到this 指向绑定,以避免出现不必要的问题,call.ap ...

  4. 改变函数中的 this 指向——神奇的call,apply和bind及其应用

    在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这 ...

  5. javascirpt之 this、apply、call、bind

    this.apply.call.bind 这又是一个面试经典问题~/(ㄒoㄒ)/~~也是 ES5中众多坑中的一个,在 ES6 中可能会极大避免 this 产生的错误,但是为了一些老代码的维护,最好还是 ...

  6. js中更改this指向 以及回顾bind、call和apply

    1.更改this指向 方法1:对this进行保存            var _this = this; 例: var _this = this;     document.onclick = fu ...

  7. js中call、apply、bind到底有什么区别?bind返回的方法还能修改this指向吗?

     壹 ❀ 引 同事最近在看angularjs源码,被源码中各种bind,apply弄的晕头转向:于是他问我,你知道apply,call与bind的区别吗?我说apply与call是函数应用,指定thi ...

  8. JavaScript 中call()、 apply()、 bind()改变this指向理解

    最近开发的过程中遇到了this指向问题,首先想到的是call().apply().bind()三个方法,有些时候这三个方法确实是十分重要,现在我们就把他们的使用方法及异同点讲解一下. 1.每个函数都包 ...

  9. 有关call和apply、bind的区别及this指向问题

    call和apply都是解决this指向问题的方法,唯一的区别是apply传入的参数除了其指定的this对象之外的参数是一个数组,数组中的值会作为参数按照顺序传入到this指定的对象中. bind是解 ...

随机推荐

  1. (NO.00002)iOS游戏精灵战争雏形(三)

    在Sprite中新建Sprites文件夹,在其中添加Player.cc文件,确保其类型为Sprite. 将其Root节点的CCSprite的精灵帧设置为Image/sprite-2.png,然后打开物 ...

  2. (NO.00001)iOS游戏SpeedBoy Lite成形记(十二)

    如果选手能在加速的时候屁股产生推进器效果就跟好了,仿佛选手腾云驾雾的感觉.我们可以用Cocos2D中的CCMotionStreak类来轻松实现.下面在Player.h接口文件添加以下代码: @prop ...

  3. PSAM 卡的应用 操作方法

    PSAM 卡的应用        PSAM 功能 终端安全存储模块        PASM  常用于 脱机交易的 安全认证        脱机交易的流程          1.卡片对持卡人的认证(防止 ...

  4. STL - vector容器

    1Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添加 ...

  5. 《java入门第一季》之面向对象(方法重写问题)

    方法重载的引入:根据一个案例: /* 继承中成员方法的关系: A:子类中的方法和父类中的方法声明不一样,这个太简单. B:子类中的方法和父类中的方法声明一样,这个该怎么玩呢? 通过子类对象调用方法: ...

  6. MTK6577+Android之Camera驱动

    MTK6577+Android之Camera驱动 <MTK安卓平台的Camera效果在线调试> 1.     Camera拍照相关概念 1.1  ISP isp--(Image Signa ...

  7. How Tomcat Works读书笔记三-------连接器

    几个概念 HttpServlet,Servlet Servlet是一个接口,定义了一种网络服务,我们所有的servlet都要实现它(或它的子类) HttpServlet是一个抽象类,它针对的就是htt ...

  8. mybatis配置开发

    以mysql为例: 一.需要的架包:mybatis.jar和mysql-connector-java.jar 二.一般会有两类配置文件:数据库配置文件和要执行的sql语句 数据库配置文件(配置文件中有 ...

  9. The 7th tip of DB Query Analyzer

              The 7th tip of DB Query Analyzer MA Gen feng ( Guangdong Unitoll Services incorporated, Gu ...

  10. javascript内置对象速查(二)

    Window对象 每个浏览器窗口或框架都对应于一个Window对象,它是随body或frameset元素的每个实例一起创建的对象. function status_text(){ window.sta ...