--------------------call------------------------
call
1 调用函数,改变函数中的this
2 第一个参数 设置函数内部this的指向
其它参数,对应函数的参数
3 函数的返回值 call的返回值就是函数的返回值
4 测试
function fn(x, y) {
console.log(this);
console.log(x + y);
}
fn(5, 6); // this->window
// obj对象
var obj = {
name: 'zs'
}
fn.call(obj, 5, 6);
// 应用
// 1、用来操作伪数组(伪数组中没有数组拥有的方法,比如push()方法)
var a;
function f1() {
// 用a来接收
a = arguments;//arguments是一个伪数组
}
f1(3,5,2);
// 利用Array中的方法
Array.prototype.push.call(a, 9);//为a增加一个9,里面的length属性也会自动增加
// 2、查看类型
console.log(obj.toString());// 输出:[object Object],前面的object表示是一个对象,后面的表示对象的类型是Object
var arr = [3,5];
console.log(arr);// 输出了:[3, 5],因为数组重写过这个方法
console.log(Object.prototype.toString.call(arr));//输出:[object Array]
// 我们可以通过这个查看对象的类型
--------------------apply------------------------
apply 只有两个参数
1 调用函数,改变函数中的this
2 第一个参数 设置函数内部this的指向
第二个参数 是数组,将数组中的内容当做函数传入
3 函数的返回值 apply的返回值就是函数的返回值
4 测试
// 函数fn
function fn(x, y) {
console.log(this);
console.log(x + y);
}
// 对象obj
var obj = {
name: 'ls'
}
// 将fn中的this指向obj
fn.apply(obj, [1, 2]);
// apply的应用
// 我们知道Math中有max方法可以找出最大值
console.log(Math.max(1,5,33,5,7));
// 在数组中我们没有max方法找出一组数的最大值,借助Math.max方法
var arr = [3,22,4,6,1];
var max = Math.max.apply(Math, arr);//我们传入的arr数组会被展开,当做实参
console.log(max);
--------------------bind----------------
bind
1 改变函数中的this,不会调用函数,而是把函数复制一份
2 第一个参数 设置函数内部this的指向
其它参数,对应函数的参数
3 函数的返回值 call的返回值就是函数的返回值
4 测试
// 创建函数fn
function fn(x, y) {
console.log(this);
console.log(x + y);
}
fn(2,3); // this -> window
//创建obj对象
var obj = {
name: 'ww'
}
var f = fn.bind(obj, 5, 5); //将this -> obj
f();
2-3函数的bind(),call(),apply()方法
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...