以下のコードにおいてthisがどうやって働いているのかがいまいち分かっていません。自分の認識があっているか、またほかに注意点があるかなど教えていただきたいです。
環境はchromeブラウザです、一応。
JavaScript
1// 全ての関数が使用できるdelayメソッドを追加 2// メソッド内ではその関数を this() で呼び出し 3Function.prototype.delay = function d() { 4 alert('with delay'); 5 this() 6}; 7function f() { 8 alert('do the f!!') 9}; 10 11f.delay() 12// with delay 13// do the f!!
自分の認識
1.まず関数定義の時点では、delay, fそれぞれに実行コードが格納されるのみでスコープは作られていない。
2.f.delay()が実行された瞬間に
- 関数fのレキシカルスコープが作成される(自信がありません)
- f のスコープ内で'delay'メソッドを探す
- 見つからないため f の__proto__であるFunction.prototypeに探しに行く
- 定義されたdelayが実行される。この時点でdelayのレキシカルスコープが作成される(これは自信があります)
3.delay()の内部が実行される
- alert('with delay')が実行される
- this()が実行される(結果は // do the f!! つまりf自身が呼び出されている。)
thisは常に obj.func() の.の前を指す?
なんか違うような気もしますがこれであっているのでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/11 14:33
退会済みユーザー
2018/10/11 14:42
2018/10/12 02:10
2018/10/12 03:34
退会済みユーザー
2018/10/12 12:37