ES5函数新增的方法(call、apply、bind)
1.call()的使用
<script type="text/javascript">
var obj1 = {
name:'bob',
fn:function(){
console.log(this); //对象本身{name: "bob", fn: ƒ}
console.log(this.name); //bob
}
}
obj1.fn();
var obj2 = {
name:'call调用obj1的方法'
}
obj1.fn.call(obj2);//this--->{name: "call调用obj1的方法"} 相当于obj2.name;
obj1.fn.call(this); //指向window指向全局作用域
obj1.fn.call(window); //指向window
//call传递的第一个参数是this指向需要改变的对象,其实就是改变了函数调用时this指向,this指向第一个参数,第二个参数为传给该函数的实参(用逗号隔开)
</script>
2.apply 和 call 的区别
<script type="text/javascript">
var num = 0;
var obj1 ={
num:1,
fn:function(a,b){
console.log(this) //{num: 2}
console.log(this.num) //
console.log(a+b) //
}
}
var obj2 = {
num:2
}
obj1.fn.call(obj2,'10','20');
obj1.fn.apply(obj2,['10','20']);
//call和apply都能进行函数的调用,传参方式不一样call一般参数明确用逗号隔开,apply一般为参数不明确,参数以数组方式
</script>
3.找出数组的最大数(传统)
<script type="text/javascript">
var arr = [1,2,3,4,10];
var num =0;
for (var i=0;i<arr.length;i++) {
if(num<arr[i]){
num = arr[i]
}
}
console.log(num)
</script>
4.用 apply 找出数组的最大值和最小值
<script type="text/javascript">
var arr = [1,2,3,4,10];
var maxNum = Math.max.apply(window,arr);
var minNum = Math.min.apply(null,arr);
console.log(maxNum);//10
console.log(minNum);// 1
</script>
5.bind 的使用
<script type="text/javascript">
var num = 6;
var obj1 = {
num: 10,
fn: function(x, y) {
return this.num + x + y;
}
}
var obj2 = {
num: 8
}
var a = obj1.fn.bind(this, 1, 2)(); //改变函数调用时this指向,此时this是window;
console.log(a)//
</script>
ES5函数新增的方法(call、apply、bind)的更多相关文章
- 带你学习ES5中新增的方法
1. ES5中新增了一些方法,可以很方便的操作数组或者字符串,这些方法主要包括以下几个方面 数组方法 字符串方法 对象方法 2. 数组方法 迭代遍历方法:forEach().map().filter( ...
- 前端学习之回调函数、call方法、apply方法
今天学习的内容比较少,大部分时间是自己在写qq音乐和京东移动端的页面.现在说说今天学到的内容: 首先,回调函数,就是在函数内部中调用另外一个函数, 将一个函数当作参数传给另一个函数,被传的函数叫做回调 ...
- ES5对象新增的方法
Object.is()-----判断是否全等,和===一样Object.assign()-----对象的复制Object.keys()-----以数组的形式返回所有可遍历属性的键名,原型上的属性不能遍 ...
- Es5数组新增的方法及用法
1.forEachforEach是Array新方法中最基本的一个,就是遍历,循环.例如下面这个例子: [1, 2 ,3, 4].forEach(alert);等同于下面这个传统的for循环: var ...
- 《JS权威指南学习总结--8.7 函数属性、方法和构造函数》
内容要点: 在JS程序中,函数是值.对函数执行typeof运算会返回字符串 "function",但是函数是JS中特殊的对象.因为函数也是对象,它们也可以拥有属性和方法,就像普 ...
- Function.apply.bind()与Function.apply.bind()
1.Function.apply.bind(…) 我在学习promise部分的时候遇到了这样的代码: Promise.resolve([10,20]).then(Function.apply.bind ...
- 作用域链和函数内部this指向问题以及bind、call、apply方法
作用域链和函数内部this指向问题以及bind.call.apply方法 作用域链 作用域是相对于变量而言的, 其意义就在与查找变量(确定变量的来处, 变量是否可以访问到, 确定变量在当前位置是否可以 ...
- call,apply,bind——js权威指南函数属性和方法章节读书笔记
每个函数(即这两个方法是函数的方法)都包含两个非继承而来的方法: apply()和 call().参数明确,使用call.参数不明确,使用apply,可以遍历数组参数 1,call里面的参数是散开的, ...
- JS 的 call apply bind 方法
js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[, [,.argN]]]] ...
随机推荐
- C#参数数组的用法1
C# 参数数组 有时,当声明一个方法时,您不能确定要传递给函数作为参数的参数数目.C# 参数数组解决了这个问题,参数数组通常用于传递未知数量的参数给函数. params 关键字 在使用数组作为形参时, ...
- RxJava RxBinding 按钮(Button) 点击(click)
/********************************************************************* * RxJava RxBinding 按钮(Button) ...
- vue之安装配置
直接上图
- Map集合的几种遍历方式
Map<String ,String> map=new HashMap<String,String>(); map.put("1","value1 ...
- TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
报错原因:numpy不能读取CUDA tensor 需要将它转化为 CPU tensor. 所以如果想把CUDA tensor格式的数据改成numpy时,需要先将其转换成cpu float-tenso ...
- HTTP Status 500 - javax.servlet.ServletException: java.lang.NoClassDefFoundError: junit/framework/Test解决方法
java代码 package webViewer; import java.io.*; import junit.framework.Test; import com.aspose.words.*; ...
- gdb调试带参数的程序 (转载)
转自:http://www.cnblogs.com/rosesmall/archive/2012/04/10/2440514.html 一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程 ...
- python 之 配置环境变量、通过pip 安装第三方库
配置环境变量 右击桌面上的“此电脑”—>“属性”—>“高级系统设置”—>右下角“环境变量”—>双击“系统变量”里的“Path”—>点击“新建”—>输入python的 ...
- iSCSI 原理和基础使用
终于完成最后一篇了,一上午的时间就过去了. 下文主要是对基本操作和我对iSCSI的理解,网上有很多iSCSI原理,在这里我就不写了,请自行学习. 这篇文章仅对iSCSI的很多误解做一次梳理,你必须对所 ...
- iOS 获取类的字符串名称 Swift4
以下实例基于Swift4,且在class, struct, enum中都可用: class Foo { // 实例属性中指定明确的类名来获取名称 var typeName: String { ...