Source javascript language essence. This is not the source code in the book.
Js function calls are free of charge. The extra parameters are this and arguments. Arguments is a parameter array. It is not a real array, but the length can be obtained using the. length method.
The call method in section 4 is as follows:
Method call mode
Function call mode
Constructor call mode
Apply call mode
Let's take a look at some instances for better understanding.
1: method call mode
Note that this points to myobject.
Copy codeThe Code is as follows:
/* Method call mode */
Var myobject = {
Value: 0,
Inc: function (){
Alert (this. value)
}
}
Myobject. inc ()
2: function call mode
Note that this points to window.
Copy codeThe Code is as follows:
/* Function call mode */
Var add = function (a, B ){
Alert (this) // this is bound to the window
Return a + B;
}
Var sum = add (3, 4 );
Alert (sum)
3: constructor call mode
We recommend that you discard this method in the essence of javascript. Because there is a better way. This document is not described here. Post the post on the next blog post.
A connection will be added here.
Copy codeThe Code is as follows:
/* Discard the constructor call mode */
Var quo = function (string ){
This. status = string;
}
Quo. prototype. get_status = function (){
Return this. status;
}
Var qq = new quo ("aaa ");
Alert (qq. get_status ());
4: apply call mode
= Let's look at a more useful apply instance. See the following code.
Copy codeThe Code is as follows:
/* Apply */
// Note that the above sum function is used
// With myobject
// The advantage of this call method is that it can point to the object that this points.
// The first parameter of apply is the object to which the this Pointer Points.
Var arr = [10, 20];
Var sum = add. apply (myobject, arr );
Alert (sum );
See the apply application. Bind is a function of binding time.
Copy codeThe Code is as follows:
Var bind = function (object, type, fn ){
If (object. attachEvent) {// IE browser
Object. attachEvent ("on" + type, (function (){
Return function (event ){
Window. event. cancelBubble = true; // stop time bubble
Object. attachEvent = [fn. apply (object)]; // ---- Here I want to talk about
// Use attachEvent in IE to add a time binding later.
// This does not point to the object itself. This. id in the function we bind cannot work normally.
// But if we use fn. apply (object)
// Here we can see that the first object of apply, that is, the point of this, is changed to the object, so this. id is changed
// Object. id can work properly.
}
}) (Object), false );
} Else if (object. addEventListener) {// other browsers
Object. addEventListener (type, function (event ){
Event. stopPropagation (); // stop time bubble
Fn. apply (this)
});
}
}
Bind (document. getElementById ("aaa"), "click", function () {alert (this. id )});