js中call和apply的作用和用法
call和apply的用途是完全一样的。改变函数中this的指向:
为什么要改变this的指向呢?这个有什么用?有哪些场景呢?
首先this的指向总是在变的,this的指向是由函数执行时所在的环境决定的,而不是函数声明时的环境。
this都指向哪里?
1、在控制台中输入下面的代码,此时可以看到this指向a这个对象。
var a={
name:'a',
getName:function(){
return this.name;
}
}
console.info(a.getName());//a
2、此时this指向了window
window.name= 'window';
var a={
name:'a',
getName:function(){
return this.name;
}
} var b = a.getName;
console.info(b());//window
结论:
如果函数是作为一个对象的属性被调用的(用点的方式调用),此时函数内的this就指向这个对象。
如果是用变量或者名称的方式直接调用的(不是使用点调用),则指向window。
场景:
this的改变:在写代码时经常会遇到这种情况,将函数作为回调函数使用时,this的指向变为了window,这个不是我们预期的结果
window.name='window';
var a={
name:'a',
getName:function(callback){
return callback();//funcB使用非对象.的方式调用
},
funcB:function(){
return this.name;
}
}
console.info(a.getName(a.funcB));//window
这个时候就可以用call或者apply把this传递到callback中,callback中的this的指向就会被传入的this所替代。
当然,也可以传入其他对象覆盖当前this的指向。
window.name='window';
var b={
name:'b'
};
var a={
name:'a',
getName:function(callback){
return callback.call(b);//传入b
},
funcB:function(){
return this.name;
}
}
console.info(a.getName(a.funcB));//b
也可以借用这个对象的方法。
window.name='window';
var b={
name:'b',
getBName:function(){
return this.name;
}
};
var a={
name:'a',
getName:function(callback){
return callback.call(b);//传入b
},
funcB:function(){
return this.getBName();
}
}
console.info(a.getName(a.funcB));//b
使用这个功能可以实现类似继承的效果
var F=function(name){
this.name = name;
}
var S = function(){
this.age=arguments[];
F.apply(this,arguments);
}
S.prototype.getNameAndAge=function(){
console.info('名字是'+this.name+'年龄是'+this.age);
}
var s = new S('小红','9岁');
s.getNameAndAge();//名字是小红年龄是9岁
call和apply的区别:
传入的参数形式不一样
call(obj,参数1,参数2);
apply(obj,[参数1,参数2]);
js中call和apply的作用和用法的更多相关文章
- js中call、apply、bind的用法
原文链接:http://www.cnblogs.com/xljzlw/p/3775162.html var zlw = { name: "zlw", sayHello: funct ...
- JS中call()、apply()、bind()的用法
其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例1 obj.objAge; //17 obj.myFun() //小张年龄undefined 例2 shows( ...
- asp.net类似于js中的setTimeOut()的函数作用?
asp.net类似于js中的setTimeOut()的函数作用? 插入这行即可,定时2秒,再运行下一步: System.Threading.Thread.Sleep(); 加个随机数 Random r ...
- js中call和apply的实现原理
js中call和apply的实现原理 实现call的思路: /* 还有就是call方法是放在Function().prototype上的也就是构造函数才有的call方法 (我门可 ...
- js中哈希表的几种用法总结
本篇文章只要是对js中哈希表的几种用法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 1. <html> <head> <script type=" ...
- JS中 call() 与apply 方法
1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
- JS中call和apply
作用: 替换当前对象的方法中的this. 理解: call和apply是为了动态改变this出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作 ...
- js中call、apply、bind那些事
前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call.apply.bind的问题,比如- 怎么利用call.apply来求一个数组中最大或者最小值 如何利用call.apply来做继承 ...
- js中的call,apply,bind区别
在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...
随机推荐
- jQuery EasyUI一个基于 jQuery 的框架(创建网页所需的一切)
jQuery EasyUI学习网址:http://www.runoob.com/jeasyui/jqueryeasyui-tutorial.html jQuery MiniUI学习网址:http:// ...
- h5网页在微信里打开 右上角分享到微信好友或者朋友圈
首先你需要一个分享接口地址,然后在自定义图片 标题 描述 如下: <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js& ...
- IO流-file
1.1 IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把 ...
- 移动端根据不同DPR加载大小不同的图片
1.首先创建mixin.styl文件代码如下: bg-image($url) // 创建bg-image($url)函数 background-image: url($url + "@2x. ...
- P3403 跳楼机
题解: 据说是最短路经典题 考虑mod c一意义下 我们会发现mod c相同的话我们一定会用最少步数到达,剩余的都用c转移 由于转移图有环所以我们用spfa来dp(其实也可以理解成最短路) wa了好多 ...
- 【AtCoder】AGC014
AGC014 链接 A - Cookie Exchanges 发现两个数之间的差会逐渐缩小,所以只要不是三个数都相同,那么log次左右一定会得到答案 #include <bits/stdc++. ...
- python函数式编程——返回函数
1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 2.闭包 注意到返回的函数在其定义内部引用了局部变量args,所以,当一个函数返回了一个函数后,其内部的局部变量还 ...
- net core体系-web应用程序-4net core2.0大白话带你入门-8asp.net core 内置DI容器(DependencyInjection,控制翻转)的一点小理解
asp.net core 内置DI容器的一点小理解 DI容器本质上是一个工厂,负责提供向它请求的类型的实例. .net core内置了一个轻量级的DI容器,方便开发人员面向接口编程和依赖倒置(IO ...
- BZOJ1856 [Scoi2010]字符串 数论
原文链接http://www.cnblogs.com/zhouzhendong/p/8084577.html 题目传送门 - BZOJ1856 题意概括 找出由n个1,m个0组成的字符串,且任意前几个 ...
- 020000——00001_使用 PyCharm
1.快速上手的中文视频 简单介绍了如何安装.如何创建文件.如何设置皮肤. http://v.youku.com/v_show/id_XODMyMzM1NzQ4.html 2.Pychram 官方的快速 ...