Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 相同点:三者都可以改变 this 的指向
- 不同点:
- - apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作为函数参数所组成的数组
- ```p
- var obj = {
- name : 'sss'
- }
- function func(firstName, lastName){
- console.log(firstName + ' ' + this.name + ' ' + lastName);
- }
- func.apply(obj, ['A', 'B']); // A sss B
- call 方法第一个参数也是作为函数上下文的对象,但是后面传入的是一个参数列表,而不是单个数组
- var obj = {
- name: 'sss'
- }
- function func(firstName, lastName) {
- console.log(firstName + ' ' + this.name + ' ' + lastName);
- }
- func.call(obj, 'C', 'D'); // C sss D
- ```
- - bind 接受的参数有两部分,第一个参数是是作为函数上下文的对象,第二部分参数是个列表,可以接受多个参数
- ```p
- var obj = {
- name: 'sss'
- }
- function func() {
- console.log(this.name);
- }
- var func1 = func.bind(null, 'xixi');
- func1();
- ```
- apply、call 方法都会使函数立即执行,因此它们也可以用来调用函数
- bind 方法不会立即执行,而是返回一个改变了上下文 this 后的函数。而原函数 func 中的 this 并没有被改变,依旧指向全局对象 window
- bind 在传递参数的时候会将自己带过去的参数排在原函数参数之前
- ```p
- function func(a, b, c) {
- console.log(a, b, c);
- }
- var func1 = func.bind(this, 'xixi');
- func1(1,2) // xixi 1 2
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement