JavaScript, this
this
メソッド内のオブジェクトにアクセスするには、this
キーを使用します.通常、javascriptのthis
の値は、関数呼び出しの方法に依存します.したがって、同じ関数であっても、別のオブジェクトから呼び出されると、this
で参照される値が異なる場合があります.let user = { name: "John" };
let admin = { name: "Admin" };
function sayHi() {
alert( this.name );
}
user.f = sayHi;
admin.f = sayHi;
user.f(); // John (this == user)
admin.f(); // Admin (this == admin)
ES 5は、this
が関数呼び出し方式に関係なく一定の値を有するように、bind()
の方法を導入する.ES 6に導入された矢印関数では、this
の値が語彙コンテキストに分類される.
LexicalScopeは、宣言変数の空間決定に基づくスキャンである.// Define a variable in the global scope:
const myName = "Oluwatobi";
// Call myName variable from a function:
function getName() {
return myName;
}
上記のコードでは、myName
の語彙scopeはglobal scopeである.function getName() {
const myName = "Oluwatobi";
return myName;
}
上記のコードでは、myName
の語彙scopeはgetName()
関数の内部に位置する.
Bind()メソッド bind()
メソッドは、呼び出し時に一緒に渡された値をthis
に固定する新しい関数を生成する.const module = {
x: 42,
getX: function() {
return this.x;
}
};
const unboundGetX = module.getX;
console.log(unboundGetX()); // The function gets invoked at the global scope
// expected output: undefined
const boundGetX = unboundGetX.bind(module);
console.log(boundGetX());
// expected output: 42
call()メソッド func.call(thisArg[, arg1[, arg2[, ...]]])
1つのオブジェクトの関数またはメソッドを別のオブジェクトに割り当てまたは呼び出す場合は、call()
メソッドを使用します.call()
メソッドは、作成したメソッドを他のオブジェクトから継承することができ、容易に再使用できる新しいthis
値を関数またはメソッドに渡します.呼び出し時、最初の買収はthis
で、残りの買収はfunc
の買収です.function Product(name, price) {
this.name = name;
this.price = price;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
console.log(new Food('cheese', 5).name);
// expected output: "cheese"
function sayHi() {
alert(this.name);
}
let user = { name: "John" };
let admin = { name: "Admin" };
sayHi.call( user ); // this = John
sayHi.call( admin ); // this = Admin
apply()メソッド
func.apply(thisArg, [argsArray])call()
法は複数のパラメータを伝達することができるが、apply()
法が類似した配列形態のパラメータの違いを伝達できることを除いて、apply()
法はcall()
法と非常に類似している.したがって、パラメータが壊れやすい場合はcall()
の方法、類似の配列の場合はapply()
の方法が使用される.const numbers = [5, 6, 2, 3, 7];
const max = Math.max.apply(null, numbers);
console.log(max);
// expected output: 7
const min = Math.min.apply(null, numbers);
console.log(min);
// expected output: 2
矢印関数
矢印関数にはthis
はありません.したがって、this
が呼び出されると、矢印関数を囲む語彙scopreのthis
が使用される.なお、bind()
、call()
、apply()
の方法は使用できない.function Person(){
this.age = 0;
setInterval(() => {
this.age++; // |this|는 Person 객체를 참조
}, 1000);
}
var p = new Person();
Reference
let user = { name: "John" };
let admin = { name: "Admin" };
function sayHi() {
alert( this.name );
}
user.f = sayHi;
admin.f = sayHi;
user.f(); // John (this == user)
admin.f(); // Admin (this == admin)
// Define a variable in the global scope:
const myName = "Oluwatobi";
// Call myName variable from a function:
function getName() {
return myName;
}
function getName() {
const myName = "Oluwatobi";
return myName;
}
bind()
メソッドは、呼び出し時に一緒に渡された値をthis
に固定する新しい関数を生成する.const module = {
x: 42,
getX: function() {
return this.x;
}
};
const unboundGetX = module.getX;
console.log(unboundGetX()); // The function gets invoked at the global scope
// expected output: undefined
const boundGetX = unboundGetX.bind(module);
console.log(boundGetX());
// expected output: 42
call()メソッド func.call(thisArg[, arg1[, arg2[, ...]]])
1つのオブジェクトの関数またはメソッドを別のオブジェクトに割り当てまたは呼び出す場合は、call()
メソッドを使用します.call()
メソッドは、作成したメソッドを他のオブジェクトから継承することができ、容易に再使用できる新しいthis
値を関数またはメソッドに渡します.呼び出し時、最初の買収はthis
で、残りの買収はfunc
の買収です.function Product(name, price) {
this.name = name;
this.price = price;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
console.log(new Food('cheese', 5).name);
// expected output: "cheese"
function sayHi() {
alert(this.name);
}
let user = { name: "John" };
let admin = { name: "Admin" };
sayHi.call( user ); // this = John
sayHi.call( admin ); // this = Admin
apply()メソッド
func.apply(thisArg, [argsArray])call()
法は複数のパラメータを伝達することができるが、apply()
法が類似した配列形態のパラメータの違いを伝達できることを除いて、apply()
法はcall()
法と非常に類似している.したがって、パラメータが壊れやすい場合はcall()
の方法、類似の配列の場合はapply()
の方法が使用される.const numbers = [5, 6, 2, 3, 7];
const max = Math.max.apply(null, numbers);
console.log(max);
// expected output: 7
const min = Math.min.apply(null, numbers);
console.log(min);
// expected output: 2
矢印関数
矢印関数にはthis
はありません.したがって、this
が呼び出されると、矢印関数を囲む語彙scopreのthis
が使用される.なお、bind()
、call()
、apply()
の方法は使用できない.function Person(){
this.age = 0;
setInterval(() => {
this.age++; // |this|는 Person 객체를 참조
}, 1000);
}
var p = new Person();
Reference
function Product(name, price) {
this.name = name;
this.price = price;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
console.log(new Food('cheese', 5).name);
// expected output: "cheese"
function sayHi() {
alert(this.name);
}
let user = { name: "John" };
let admin = { name: "Admin" };
sayHi.call( user ); // this = John
sayHi.call( admin ); // this = Admin
func.apply(thisArg, [argsArray])
call()
法は複数のパラメータを伝達することができるが、apply()
法が類似した配列形態のパラメータの違いを伝達できることを除いて、apply()
法はcall()
法と非常に類似している.したがって、パラメータが壊れやすい場合はcall()
の方法、類似の配列の場合はapply()
の方法が使用される.const numbers = [5, 6, 2, 3, 7];
const max = Math.max.apply(null, numbers);
console.log(max);
// expected output: 7
const min = Math.min.apply(null, numbers);
console.log(min);
// expected output: 2
矢印関数
矢印関数にはthis
はありません.したがって、this
が呼び出されると、矢印関数を囲む語彙scopreのthis
が使用される.なお、bind()
、call()
、apply()
の方法は使用できない.function Person(){
this.age = 0;
setInterval(() => {
this.age++; // |this|는 Person 객체를 참조
}, 1000);
}
var p = new Person();
Reference
function Person(){
this.age = 0;
setInterval(() => {
this.age++; // |this|는 Person 객체를 참조
}, 1000);
}
var p = new Person();
Reference
この問題について(JavaScript, this), 我々は、より多くの情報をここで見つけました https://velog.io/@alexuh/JavaScript-thisテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol