私は数日前のインタビューでこれを使用しました。インタビュアーは、私の理解は少し偏っていると言いました。私は本といくつかのブログを読むために戻って、いくつかのテストをしました。私の理解は本当に間違っていることがわかりました。
1。グローバル変数
最も一般的に使用されるものである必要があります。関数でこれを呼び出してください、そしてこれは実際にはグローバル変数です
var値= "0"; function mei(){var value = "1"; console.log(this.value); // 0 console.log(value); // 1} mei();これがグローバルを指しているため、出力は0です
2。コンストラクター
これは私がよく知っている使用法です。これをコンストラクターで使用します。新しいオブジェクトの後、これはこの新しいオブジェクトを指します。
var値= "window"; function mei(){this.value = 1; this.show = function(){console.log(this.value)}} var m = new Mei(); console.log(m.value); // 1 M.Show(); // 1出力はウィンドウの代わりに1であることがわかります。コンストラクターのために、これはグローバル変数の代わりに新しいオブジェクトを指していることがわかります。
3.コールして適用します
私の電話から例を借りて、ブログを直接適用する
var p = "456";関数f1(){this.p = "123"; } function f2(){console.log(this.p); } f2(); // 456 f2.call(f1()); // 123 f2.Apply(f1()); // 123最初の行の出力は理解しやすいです。これはグローバルを指します。 123は、CALLまたはApplyを使用した後、F2でF1にポイント、F1のPが123になるためです。詳細については、ブログ投稿をクリックしてください。
4。関数はオブジェクトの方法として呼ばれます(エラーを犯した場所)
その時、私はいくつかの方法でオブジェクトを書くように頼みました。頭の中でグローバル変数を定義し、オブジェクトの方法でこれを呼びました。インタビュアーは私にこれが何であるか尋ねましたか?私はこの方法をほとんど使用していないので、窓であるべきだと言い、新規または電話だけがこれの方向を変えるだろうと思ったので、彼はそれが間違っていると言い、私に戻って自分で見るように頼みました。今、私はそれを試しました、私は本当に間違っています。コードを投稿します
var値= "父"; function mei(){} mei.value = "child"; mei.get = function(){console.log(this.value)}; mei.show = function(){console.log(value)}; mei.get(); // child mei.show(); //父親GETはMEIの方法と呼ばれているため、これはMei.Valueを指します。
父に関しては、私はこのように理解しています。ショーによって指される機能は、グローバル環境で定義されています。スコープチェーンのため、ショーには価値がないので、彼の環境を定義して見つけます。これにより、グローバルな価値が見つかります。ここで理解に誤りがある場合、友人がそれを指摘できることを願っています!