回答編集履歴
1
文言
test
CHANGED
@@ -4,14 +4,24 @@
|
|
4
4
|
|
5
5
|
* `bar` が `bind(foo)` の結果なら、`bar()` と呼んだ場合は `foo` が `this` となる。
|
6
6
|
|
7
|
-
* `bar.call(foo)` と呼んだ場合、`bar()` 実行中は `foo` が `this` となる。
|
7
|
+
* `bar.call(foo)` や `bar.apply(foo, [])` と呼んだ場合、`bar()` 実行中は `foo` が `this` となる。
|
8
8
|
|
9
|
-
* そうではない場合、`bar()` と呼んだときは `window` などグローバルオブジェクトが`this` となる。
|
9
|
+
* そうではない場合、`bar()` と呼んだときは、非strictモードでは `window` などグローバルオブジェクトが`this` となる。strict モードでは `this` が `undefined` になる。
|
10
10
|
|
11
|
-
* `addEventLisetner()` など、コールバックするAPIの場合、コールバック内の`this`はAPIの仕様を参照する必要がある
|
11
|
+
* `addEventLisetner()` など、コールバックするAPIの場合、コールバック内の`this`はAPIの仕様を参照する必要がある
|
12
|
+
|
13
|
+
コールバックをどう呼ぶかはAPIを使う側からは見えないため。たいていは `bind()` した結果を渡すことで変更することができる)
|
12
14
|
|
13
15
|
|
14
16
|
|
15
17
|
|
16
18
|
|
17
19
|
「どう呼ばれるか」が重要です。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
> `accordion[i].addEventListener('click',this.openAccordion,false)`
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
このコードの場合、`this.openAccordion` は `openAccordion` 関数を実行していないので、`addEventListener()` の仕様に従いイベントターゲットの要素が `this` になります。`this` が `Accordion` クラスのインスタンスになって欲しい場合は、`this.openAccordion.bind(this)` を渡します。
|