Home >Web Front-end >JS Tutorial >this points to use with call and apply
This time I will bring you the use of this pointer and call and apply. What are the precautions for the use of this pointer and call and apply. The following is a practical case, let's take a look.
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 called as a constructor, 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 three:
function Boy(name) { this.name = name; } var boy1 = new Boy('Bob'); console.log(boy1.name); //输出Bob
For example three, there is another special case, that is, when the constructorreturns an object through "return", this The final result of this operation returns this object, not the newly created object, so this is of no use in this case.
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 function. parameter list.
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 swimmingcall The number of parameters passed in is not fixed. The same as apply, the first parameter is also used to specify this in the function body. Pointing to, starting from the second parameter, each parameter is passed into the called function in turn.
Example 2:
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 shoppingIn addition, most advanced browsers also implement the bind method. The difference between it and call and apply is that bind only changes this inside the function. points to it, but it won't be executed immediately, you need to call it explicitly.
Example 3: Simulate the browser's bind method
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 variablereferences the "getName" method, because it It is called as an ordinary function, so this points to the global object window
var boy = { name: 'Bob', getName: function() { console.log(this.name); } } boy.getName(); //输出Bob var getBoyName = boy.getName; getBoyName(); //输出undefinedExample 2: Even if the function is defined inside the function, if it is called as an ordinary object, this also points to the window object
var boy1 = { name: 'Bob', age: 12, getInfo: function() { console.log(this.name); function getAge() { console.log(this.age); } getAge(); } } boy1.getInfo(); //Bob //undefinedI 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:
jquery fullpage plug-in adds header and tail copyright related
detailed explanation of webpack packaging and compression js and css steps
Detailed explanation of the configuration steps for using sass in vue
The above is the detailed content of this points to use with call and apply. For more information, please follow other related articles on the PHP Chinese website!