let role = {
test: (variable) => {
// How do I call toLog(variable) from here?
},
toLog: (variable) => {
console.log(variable);
}
};
私はテスト()関数内でtoLog()関数を呼び出したいのですが、私はどのように気づいていないんです。同じオブジェクト内の別の関数を呼び出す方法は?
let role = {
test: (variable) => {
// How do I call toLog(variable) from here?
},
toLog: (variable) => {
console.log(variable);
}
};
私はテスト()関数内でtoLog()関数を呼び出したいのですが、私はどのように気づいていないんです。同じオブジェクト内の別の関数を呼び出す方法は?
標準JS関数は動的バインディングを使用し、this
は、実行時にメソッドを呼び出している人に依存しているので、我々はrole.test()
を使用して、それを呼び出す場合、それは、role
にthis
をバインドします。
アロー関数は現在のコンテキストにthis
をバインドします。コードは、ブラウザのコンソールでwritternた場合たとえば、this
はwindow
オブジェクトにバインドされています。これは、それが中で定義された閉鎖へthis
をバインドすることを意味を結合静的な字句、呼ばれ
あなたは矢印の機能を使用しない場合はrole
によって呼び出されたとき、this
は、オブジェクト自体を指します。
この場合
const role = {
test(variable){
this.toLog(variable);
},
toLog(variable) {
console.log(variable);
}
};
role.test(5);
、我々は外側のコンテキストにthis
をバインドしたくないので、私たちはダイナミックの賛成でスタティックバインディングをスキップします 1。私たちはコールバックとして、このメソッドを使用します場合
しかし、動的バインディングは、メソッドを実行している人によるとthis
変化します。それを防ぐために、我々はrole
への結合を明示的に静的を作成するためにbind
を使用する必要があります。
const role = {
test(variable) {
this.toLog(variable);
},
toLog(variable) {
console.log(variable);
}
};
let test = role.test;
try {
test(20); // will throw an error - this.toLog is not a function - because this points to window
} catch (e) {
console.log(e);
}
test = role.test.bind(role);
test(25); // will work because it's staticly binded to role
'role.toLog()'か、単に[あなたがそれらを必要としない矢印の機能を使用しないでください 'this.toLog()' – Ties
を使用できるようにクラスを使用します!](http://stackoverflow.com/q/34361379/1048572)(オブジェクトリテラルで)メソッドの構文を使用すると、単に 'いつものようにthis.toLog'を呼び出すことができます。 – Bergi