this -- apply或call调用

applycall 这两个方法可以切换函数执行的上下文环境,也就是改变this绑定的对象。apply和call比较类似,区别在于传入参数时一个要求是数组,一个要求是分开传入。所以我们以apply为例:

var name = "window";  

var someone = {
    name: "Bob",
    showName: function(){
        alert(this.name);
    }
};  

var other = {
    name: "Tom"
};     

someone.showName();     //Bob
someone.showName.apply();    //window
someone.showName.apply(other);    //Tom  

可以看到,正常访问对象中方法时,this指向对象。使用了apply后,apply无参数时,this的当前对象是全局,apply有参数时,this的当前对象就是该参数。

时间: 2024-10-27 02:39:32

this -- apply或call调用的相关文章

函数的四种调用模式.上下文调用.call.apply

闭包:函数就是一个闭包,一个封闭的作用域; 返回函数,要返回多个函数就用一个对象封装一下, 立即执行函数+return 回调函数 JS动态创建的DOM,不会被搜索引擎抓取,对SEO不友好. /*window的name属性*/ function fn(){ console.log(this.name); } fn.call({name:"zhangsan"});//"zhangsan" console.log(); fn();//'' 打印空字符串,此时调用fn其中的

Scala 中apply方法的用法

Scala 是构建在 JVM 上的静态类型的脚本语言,而脚本语言总是会有些约定来增强灵活性.关于协议在Python中是挺多的,看看Python的对象协议,有很多很多,如果对Python的对象协议了解(不了解的可以点击此处)的比较深刻的话,其实scala的apply方法也是很好理解的,比如说 Scala 为配合 DSL 在方法调用时有这么一条约定: 在明确了方法调用的接收者的情况下,若方法只有一个参数时,调用的时候就可以省略点及括号.如 "0 to 2",实际完整调用是 "0.

$apply方法是怎么来解决异步的问题

<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <script src="./js/angular-1.5.8.js"></script></head><body ng-app="mainApp" ng-con

关于call和apply的使用和区别

JavaScrtipt在动态变换运行时会出现上下文特性, 在运行中,代码总是有一个上下文对象,代码处理在该对象之内. 上下文对象是通过this变量来体现的, 这个this变量永远指向当前代码所处的对象中.而动态改变方法所在的上下文this则需要使用apply和call方法. 首先,这两个方法的作用是一样的,不同的只是表现方式,即传入参数的形式不同. 语法如下: 语法: foo.call([thisobj,arg1, arg2, arg2),接受多个参数,第一个为执行上下文相关实例化对象(this

谈谈Angular关于$watch,$apply 以及 $digest的工作原理

这篇文章主要是面向那些刚开始学AngularJs和想要了解数据绑定(data-binding)是怎么工作的, 如果你已经熟悉如何使用angularjs了,我强烈建议你不用阅读了. angularjs使用者想要知道data-binding是如何工作的,就会遇到很多的关的术语 比如$wacth,$apply,$digest,dirty-checking(脏值检测)...等等,这些又是做什么的呢? 在这篇文章里我会解决所有的疑问,通过结合这些术语在一起来学习. 但是我会尽量用简单的方式来说明. 现在开

call和apply的作用和区别

call和apply用来调用函数,并用指定对象(第一个参数)替换函数的 this 值,同时用指定数组替换函数的参数.注:也可以不指定参数,此时只是单纯的调用函数,如:fun.call() 语法: fun.call(thisobj,arg1,arg2) ;当后面参数个数确定时用call,参数之间用逗号连接 fun.apply(thisobj,[arg1,arg2]):当后面参数个数不确定时用apply,参数通过数组形式输入 call和apply的作用: 改变this的指向,第一个参数为你要传入的对

别真以为JavaScript中func.call/apply/bind是万能的!

自从学会call/apply/bind这三个方法后我就各种场合各种使用各种得心应手至今还没踩过什么坑,怎么用?说直白点就是我自己的对象没有某个方法但别人有,我就可以通过call/apply/bind去调用执行别人家的方法,不太懂具体用法的同学可移至MDN学习一下Function.prototype.call() Function.prototype.apply() Function.prototype.bind() ,本文不讲解使用,但是这三个方法并不是万能的,并不一定会执行你想要的那个函数,因

Angular关于$watch,$apply 以及 $digest的工作原理

我们的浏览器会检测等待事件发生,比如用户的一些行为,假如你点击了一个button或者在input写东西, 事件的回调就会在内置的JavaScript跑起来,然后你就能够做一些DOM操作了. 所以当回调发生的时候,浏览器中的DOM会发生一些变化. 而Angularjs扩展了这个事件轮询,创建了一个叫angular content的东西(记住它,非常重要的一个概念), 为了解释这个context是什么以及它是怎么工作的,我们需要先了解一下其他的一些概念. The $watch list 每当你在ui

angularJS $watch $digest $apply

一 简介AngularJS提供了一个非常酷的特性叫做双向数据绑定(Two-way Data Binding),这个特性大大简化了我们的代码编写方式.数据绑定意味着当View中有任何数据发生了变化,那么这个变化也会自动地反馈到scope的数据上,也即意味着scope模型会自动地更新.类似地,当scope模型发生变化时,view中的数据也会更新到最新的值.那么AngularJS是如何做到这一点的呢?当你写下表达式如{{ aModel }}时,AngularJS在幕后会为你在scope模型上设置一个w