This time I will show you how to use call and apply in JS, and what are the precautions for using call and apply in JS. The following is a practical case, let's take a look.
In specific practical applications, the point of this cannot be determined when the function is defined, but is determined when the function is executed. It can be roughly divided into the following three types according to the execution environment:1. When the function is called as a normal function, this points to the global object 2. When the function is called as a method of the object, this points to the object 3. When the function is used as a constructor When the caller is called, this points to the newly created object
Example 1:
window.name = 'myname'; function getName() { console.log(this.name); } getName(); //输出myname
Example 2:
var boy = { name: 'Bob', getName: function() { console.log(this.name); } } boy.getName(); //输出Bob
Example 3:
function Boy(name) { this.name = name; } var boy1 = new Boy('Bob'); console.log(boy1.name); //输出Bob
Example four:
function Boy(name) { this.name = name; return { //返回一个对象 name: 'Jack' } } var boy1 = new Boy('Bob'); console.log(boy1.name); //输出Jack
Example five:
function Boy(name) { this.name = name; return 1; //返回非对象 } var boy1 = new Boy('Bob'); console.log(boy1.name); //输出Bob
The role of call and apply
apply accepts two parameters. The first parameter specifies the pointer of this in the function body. The second parameter is an array or array-like used to pass the number of the called Example 1:function getInfo() {
console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}
var boy1 = {
name: 'Bob',
age: 12
}
getInfo.apply(boy1,['sing','swimming']); //输出Bob like sing and swimming
function getInfo() {
console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}
var boy1 = {
name: 'Bob',
age: 12
}
getInfo.call(boy1,'sing','shopping'); //输出Bob like sing and shopping
Function.prototype.bind = function(obj){
var self = this;
return function(){
return self.apply(obj,arguments);
}
};
var obj = {
name: 'Bob',
age: 12
};
var func = function(){
console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}.bind(obj);
func('sing','shopping');
The missing this is in In some cases, the pointing of this will be lost. In this case, we need to use call, apply and bind to change the pointing of this.
Example 1: When the "getName" method is called as a property of the "boy" object, this points to the "boy" object. When another variable
references the "getName" method, because it It is called as an ordinary function, so this points to the global object windowvar boy = {
name: 'Bob',
getName: function() {
console.log(this.name);
}
}
boy.getName(); //输出Bob
var getBoyName = boy.getName;
getBoyName(); //输出undefined
var boy1 = { name: 'Bob', age: 12, getInfo: function() { console.log(this.name); function getAge() { console.log(this.age); } getAge(); } } boy1.getInfo(); //Bob //undefined
I believe After reading the case in this article, you have mastered the method. For more exciting information, please pay attention to other related articles on the PHP Chinese website!
Recommended reading:
How vue-element makes a music playerVueJs parent-child component communication method summaryThe above is the detailed content of How to use call and apply in JS. For more information, please follow other related articles on the PHP Chinese website!