これについて知っていますか?Can you talk about your understanding of this ?
3277 ワード
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
の変更の指向性を示す、一般的な方法はcall
、apply
、bind
である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
call
、 apply
、 bind
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