第一种:
function bindThis(f, oTarget) {
return function(){
return f.call(oTarget,...arguments)
}
} //使用call方法 注意arguments对象的参数形式
第二种:
return function(){
return f.apply(oTarget,arguments)
}
} //使用apply方法
第三种:
function bindThis(f, oTarget) {
return f.bind(oTarget)
}// bind方法 直接绑定this指向
考察点:call,apply和bind的作用和区别?
相同点:1:都能改变this指向
2:都能传递参数
3:都能通过方法"."方法名调用
不同点:1:函数名不同
参数传递方式不同:call是一个一个的传递;apply是作为数组或者数组对象传递;bind是预先指定部分参数并返回一个新函数;
改变this指向的时机不同:call和apply都是立即调用,并且用于动态指定函数的上下文和参数;bind则是创建一个新的函数,并将指定的对象作为函数上下文,可以预先指定部分参数。(bind在复制时改变,其他两个在调用时改变)
参数传递时机不同(注意看第三个)
call的详细介绍:
call 方法是 JavaScript 中函数对象的一个方法,它允许您在调用函数时动态地指定函数的上下文(即 this 值)以及函数的参数。与 apply 方法不同的是,call 方法的参数是一个一个地传递的,而不是作为数组传递。
以下是一个简单的示例,演示了如何使用 call 方法:
var person = {
firstName: "John",
lastName: "Doe",
fullName: function() {
return this.firstName + " " + this.lastName;
}
};
var sayHello = function(greeting) {
console.log(greeting + ", " + this.fullName());
};
sayHello.call(person, "Hello"); // 输出 "Hello, John Doe"
在上面的示例中,我们定义了一个 person 对象和一个 sayHello 函数。然后,我们使用 call 方法调用了 sayHello 函数,并将 person 对象作为其上下文,同时传递了一个参数 "Hello"。当我们调用 call 方法时,sayHello 函数会以 person 对象作为上下文,并输出 "Hello, John Doe"。
bind的详细介绍:
JavaScript 中的 bind 方法用于创建一个新的函数,该函数在调用时会将指定的对象作为其上下文(即 this 值),并且可以预先指定一些参数。这在需要在事件处理程序、回调函数等场景中非常有用。
以下是一个简单的示例,演示了如何使用 bind 方法:
var person = {
firstName: "John",
lastName: "Doe",
fullName: function() {
return this.firstName + " " + this.lastName;
}
};
var logName = function(greeting) {
console.log(greeting + ", " + this.fullName());
};
var logPersonName = logName.bind(person, "Hello");
logPersonName(); // 输出 "Hello, John Doe"
在上面的示例中,我们定义了一个 person 对象和一个 logName 函数。然后,我们使用 bind 方法创建了一个新的函数 logPersonName,并将 person 对象绑定为其上下文。同时,我们也预先指定了一个参数 "Hello"。当我们调用 logPersonName 函数时,它会以 person 对象作为上下文,并输出 "Hello, John Doe"。
apply的详细介绍:
apply 方法是 JavaScript 中函数对象的一个方法,它允许您在调用函数时动态地指定函数的上下文(即 this 值)以及函数的参数。apply 方法接收两个参数:第一个参数是要绑定为函数上下文的对象,第二个参数是一个数组或类数组对象,其中包含了作为函数参数传递的值。
以下是一个简单的示例,演示了如何使用 apply 方法:
var person = {
firstName: "John",
lastName: "Doe",
fullName: function() {
return this.firstName + " " + this.lastName;
}
};
var sayHello = function(greeting) {
console.log(greeting + ", " + this.fullName());
};
sayHello.apply(person, ["Hello"]); // 输出 "Hello, John Doe"
在上面的示例中,我们定义了一个 person 对象和一个 sayHello 函数。然后,我们使用 apply 方法调用了 sayHello 函数,并将 person 对象作为其上下文,同时传递了一个数组 ["Hello"] 作为函数的参数。当我们调用 apply 方法时,sayHello 函数会以 person 对象作为上下文,并输出 "Hello, John Doe"。
网友评论