In the article "Detailed explanation of how to use this keyword in JavaScript", I gave examples of 8 ways of using this keyword in JavaScript and JScript. It turns out that there are two ways to use this keyword that were not mentioned at the time. I will add some additional explanations now. And through the first explanation of the use of this keyword, we can better understand the essence of JavaScript as an Object-Based language.
One is related to the definition in JavaScript classes. We know that when we define the following class:
function JSClass()
{
}
JSClass.prototype.m_Properties = 100;
JSClass.prototype.ToString = function()
{
alert(this.m_Properties);
}
This.m_Properties in the method ToString is 100, so what about the following definition?
function JSClass()
{
}
JSClass.m_Properties = -100;
JSClass.ToString()
{
alert (this.m_Properties);
}
What is this.m_Properties in ToString at this time? It's -100. Surely? This is not necessarily true, it depends on how we call the ToString method.
JSClass.ToString();
var fun = JSClass.ToString();
fun();
The running result at this time is actually: -100 and undefined. It's really depressing. How can I get -100 by running fun? You need to assign a value to fun like this:
var fun = function() { JSClass.ToString(); }
fun();
Haha, this is -100. It seems quite nonsense, isn't it still called JSClass.ToString() in the end? We'll talk about this later. Let's see what happens when these two JSClasses are combined?
function JSClass()
{
}
JSClass.m_Properties = -100;
JSClass.prototype.m_Properties = 100;
JSClass.ToString = function()
{
alert(this.m_Properties);
}
JSClass.prototype.ToString = function()
{
alert( this.m_Properties);
}
What is the relationship between these two ToString() methods and the this keyword inside them? Look at the following example:
var jsclass = new JSClass();
jsclass.ToString();
JSClass.ToString();
The results are: 100 and -100. The jsclass here is actually the JavaScript language mechanism, which creates a new instance through the description of the new keyword. And what is JSClass? They are originally object instances, but they look like functions or class descriptions. Regarding the question of this, this in the first jsclass.ToString() method refers to the newly created instance, and this in the JSClass.ToString() method refers to the object instance of JSClass.
If you understand the different nature of the two things this refers to, you can better understand why JavaScript is called an Object-Based language and the essential difference between it and Object-Oriented language. .
Let’s talk about how to use this in the second supplement, that is, when using the eval method, what is this at this time? Take a look:
alert(this === eval("this"));
What is the result? It's true! This is because the scope in which the code within eval is executed is the current page itself.