これについて知っていますか?Can you talk about your understanding of this ?


thisについて知っていますか?thisの指向は、作成時に決定されるのではなく、実行時に決定されるとともに、thisの異なる指向は、一定の規則に従うことにある.
まず、デフォルトでは、thisはグローバルオブジェクトを指し、例えばブラウザではwindowを指す.
name = "Bale";

function sayName () {
    console.log(this.name);
};

sayName(); //"Bale"

次に、関数が呼び出された場所にコンテキストオブジェクトがある場合、関数は暗黙的にバインドされます.
function f() {
    console.log( this.name );
}

var obj = {
    name: "Messi",
    f: f
};

obj.f(); //           obj  ,     Messi

また、thisの変更の指向性を示す、一般的な方法はcallapplybindであるbindを例にとります.
function f() {
    console.log( this.name );
}
var obj = {
    name: "Messi",
};

var obj1 = {
     name: "Bale"
};

f.bind(obj)(); //Messi ,  bind obj   f           ,                ,  bind apply call   

最後に、最も優先度の高いバインディングnewバインディングでもある.newでコンストラクション関数を呼び出すと、新しいオブジェクトが作成されます.この新しいオブジェクトを作成する過程で、新しいオブジェクトはPersonオブジェクトのthisに自動的にバインドされ、thisは自然にこの新しいオブジェクトを指します.
function Person(name) {
  this.name = name;
  console.log(name);
}

var person1 = new Person('Messi'); //Messi

バインディングの優先度:newバインディング>明示的バインディング>暗黙的バインディング>デフォルトバインディング
Can you talk about your understanding of this ?
The direction of this is not determined at the time of wraiting, but determined at the time of execution. At the same time, the different direction of this lies in following certain rules.
First of all, by default, the this refers to the object of global, such as which refers to the window in browser.
name = "Bale";

function sayName () {
    console.log(this.name);
};

sayName(); //"Bale"

Second, if there is a context object at the location where the function is called, then the function is implicitly bound.
function f() {
    console.log( this.name );
}

var obj = {
    name: "Messi",
    f: f
};

obj.f(); //           obj  ,     Messi

Again, this display changes this point, the common methods are callapplybind
Take bind as an example:
function f() {
    console.log( this.name );
}
var obj = {
    name: "Messi",
};

var obj1 = {
     name: "Bale"
};

f.bind(obj)(); //Messi ,  bind obj   f           ,                ,  bind apply call   

Finally, it is the binding new with the highest priority.
Calling a constructor function with new keyword, and it will create a new object. in the process of creating new object, the new object will be bound the this in Person object automatically, and then the this will point to the new object naturally.
function Person(name) {
  this.name = name;
  console.log(name);
}

var person1 = new Person('Messi'); //Messi

Binding priority: new Binding > explicit binding > implicit binding > default binding