js中call,apply与bind三函数
来源:互联网 发布:女生百搭外套 知乎 编辑:程序博客网 时间:2024/05/22 12:51
js的call,apply,bind方法,切换/固定this指向
func.call(thisValue, arg1, arg2, ...);
第一个参数就是this所要指向的那个对象,后面的参数则是函数调用时所需要的参数.
例:
function add(a, b) {
return a + b;
}
add.call(this, 1, 2);
call方法的一个应用是调用对象的原生方法
var obj = {};
obj.hasOwnProperty('toString'); //false
obj.hasOwnProperty = function () {
return true;
}
obj.hasOwnProperty('toString'); //true
object.prototype.hasOwnPRoperty.call(obj, 'toString'); //false
function.prototype.apply()
apply方法和call类似,也是改变this指向,然后调用该函数,唯一的区别是:它接受一个数组作为函数执行
时的参数,使用格式如下:
func.apply(thisValue,[arg1, arg2, ...]);
function f(x, y) {
return x + y;
}
f.call(this,1,1);
f.apply(this,[1, 1]);
function.prototype.bind()
bind方法用于将函数体内的this绑定到某个对象,然后返回一个新函数.
var print = console.log;
print(4);
//报错,因为此时console.log中的this对象已经不指向console了
使用bing解决这个问题
var print = console.log.bind(console);
print(2);
例:
var counter = {
count: 0,
inc: function() {
this.count++;
}
};
counter.count; //0
counter.inc();
counter.count(); //1
this指向莫名的改变
var counter = {
count: 0,
inc: function() {
this.count++;
}
};
var func = counter.inc;
func();//此时this指向window,莫名改变了...
如何解决这个问题,使用bind
var func = counter.inc.bind(counter);
将inc内部的this绑定到counter对象上
bind比call和apply方法更屌的是,除了绑定this之外,还可以绑定原函数的参数.
var add = function(x, y) {
return x * this.m + y * this.n;
};
var obj = {
m: 2,
n: 2
};
var newAdd = add.bind(obj, 5);
newAdd(5); //20
call方法与bind方法的结合使用
[1, 2, 3].slice(0, 1);
Array.prototype.slice.call([1, 2, 3], 0, 1);
Array.prototype.slice.apply([1, 2, 3], [0, 1]);
var slice = Function.prototype.call.bind(Array.prototype.slice);
slice([1, 2, 3], 0, 1);
func.call(thisValue, arg1, arg2, ...);
第一个参数就是this所要指向的那个对象,后面的参数则是函数调用时所需要的参数.
例:
function add(a, b) {
return a + b;
}
add.call(this, 1, 2);
call方法的一个应用是调用对象的原生方法
var obj = {};
obj.hasOwnProperty('toString'); //false
obj.hasOwnProperty = function () {
return true;
}
obj.hasOwnProperty('toString'); //true
object.prototype.hasOwnPRoperty.call(obj, 'toString'); //false
function.prototype.apply()
apply方法和call类似,也是改变this指向,然后调用该函数,唯一的区别是:它接受一个数组作为函数执行
时的参数,使用格式如下:
func.apply(thisValue,[arg1, arg2, ...]);
function f(x, y) {
return x + y;
}
f.call(this,1,1);
f.apply(this,[1, 1]);
function.prototype.bind()
bind方法用于将函数体内的this绑定到某个对象,然后返回一个新函数.
var print = console.log;
print(4);
//报错,因为此时console.log中的this对象已经不指向console了
使用bing解决这个问题
var print = console.log.bind(console);
print(2);
例:
var counter = {
count: 0,
inc: function() {
this.count++;
}
};
counter.count; //0
counter.inc();
counter.count(); //1
this指向莫名的改变
var counter = {
count: 0,
inc: function() {
this.count++;
}
};
var func = counter.inc;
func();//此时this指向window,莫名改变了...
如何解决这个问题,使用bind
var func = counter.inc.bind(counter);
将inc内部的this绑定到counter对象上
bind比call和apply方法更屌的是,除了绑定this之外,还可以绑定原函数的参数.
var add = function(x, y) {
return x * this.m + y * this.n;
};
var obj = {
m: 2,
n: 2
};
var newAdd = add.bind(obj, 5);
newAdd(5); //20
call方法与bind方法的结合使用
[1, 2, 3].slice(0, 1);
Array.prototype.slice.call([1, 2, 3], 0, 1);
Array.prototype.slice.apply([1, 2, 3], [0, 1]);
var slice = Function.prototype.call.bind(Array.prototype.slice);
slice([1, 2, 3], 0, 1);
0 0
- js中call,apply与bind三函数
- js中call、apply、bind函数
- 函数中.call/.bind/.apply三者的区别
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- js中bind、call、apply函数的用法
- JS call bind apply
- !!js中call、apply、bind的用法
- js中call、apply、bind的用法
- JS中call、apply、bind使用指南
- JS中apply call bind的区别
- JS中call、apply、bind大概区别
- Dubbo多注册中心
- Python-subprocess
- H+ ui相关笔记
- BZOJ4636 蒟蒻的数列 链表
- Android四种启动模式Demo详解
- js中call,apply与bind三函数
- 在平面内判断俩直线是否有交点
- CAShapLayer iOS
- remove duplicate letters
- springmvc+spring的web.xml配置
- Git快速入门四:指令集
- hdu 2674 N!Again(简单数学)
- (开发笔记)转载:如何在MySQL5.0中使用UTF8
- Deepest Station