一般函数的调用(全局环境中函数的调用)
-
非严格模式:
function hello(message){ console.log(this+message+"world"); } const = mes = helle("hello"); const mes2 = hello.call(window,"hello")
- 函数调用部分等同于: const mes = hello.call(window,"hello")
-
严格模式:
function hello(message){ console.log(this+message+"world"); } const mes = hello("hello");
- 函数调用部分等同于: const mes = hello.call(undefined,"hello")
对象方法的调用(对象里面的函数的调用)
const person = {
name: "ZhaoWei",
age: 13,
sayHi: function (message) {
console.log(this + message + "world");
}
};
person.sayHi("hello");
- 对象方法调用部分等同于:person.sayHi.call(person,"hello")
模拟bind()
bind()方法就是在内部调用了call()或者apply()方法主动指定this对象,同时为了函数可以复用,借用了闭包来保存这个this对象(闭包这里不多说),以下是模拟bind()方法的示例:
const person = {
name: "ZhaoWei",
age: 13,
sayHi: function (message) {
console.log(this + message + "world");
}
};
const bind = function(func,thisV){
return function(){
return func.apply(thisV,arguments)
}
}
const mes = bind(person.sayHi,person)
mes("hello");