11

重複の可能性:
このJavaScriptイディオムの根底にあるもの:var self = this?

javascriptでselfとthisをいつ使用するか混乱しています。これは現在のコンテキストを指し、自己
は現在のウィンドウを指す ことを私は知っています。 私はチタンでアプリケーションを開発しています。いつセルフを使うのかそれともチタン開発にセルフ の概念があるのか​​知りたいです。

これが私のチタンcommonJSモジュールで行っているサンプルコードです

var auth = require('/SDKTest/auth');
var nodeAPI = require('/SDKTest/nodeAPI');
function myAPI() {
     this.auth = auth;
     this.nodeAPI = nodeAPI;
     return this;
    }
module.exports = myAPI;

このコードは機能しますが、これの代わりにselfを使用できますか?そして、これを使用する代わりに、名前空間を作成して次のようなことを行うことができます。

  function myAPI() {
     var api = {};
     api.auth = auth;
     api.nodeAPI = nodeAPI;
     return api;
    }

どちらのアプローチも機能しますが、ここでこれを使用する用途は何ですか

4

2 に答える 2

9

selfJavaScriptのキーワードではありません!プログラマーは、オブジェクト自体への常に有効な参照を持つようにクラスを定義するときにそれを使用します。

var Person = function() {
    var self = this;
    // private function
    function say(what) {
        alert(what);
    }
    self.fetchSomething = function() {
        var xhr = Ti.Network.createHTTPClient({
            onload: function() {
                // in this case 'this' is referencing to xhr!!!
                say(this.responseText);
            }
        });
        xhr.open('GET', 'http://www.whatever.com');
        xhr.send();
    }
    return self;
}
var p = new Person();
p.fetchSomething();
于 2012-10-05T10:46:31.333 に答える
3

あなたの質問はやや紛らわしいです、それは尋ねるようなものです:私はリンゴまたはトマトを購入しますか?答えは、完全に異なるため、実際に何をしたいかによって異なります。

基本的に、2つの違いをすでに知っているので、ある程度自分の質問に答えています。

  • this現在のコンテキストを参照します
  • selfを指しますwindow
function myAPI() {
     this.auth = auth;
     this.nodeAPI = nodeAPI;
     return this;
    }
module.exports = myAPI;

self代わりに使用できるかどうかを尋ねています。それについて考えてください、あなたは何をすることがthisできますか?これにより、コンテキストを参照できます。コンテキストは何ですか、まあ、それはmoduleあなたが呼び出すときですmodule.exports()。そして、moduleそうなる可能性はほとんどないwindowので、いいえ、ここでは使用できませんself

それは質問に答えますか?

2番目のコード例は、まったく異なることをしているようです。どうしたらいいのかわからない。

于 2012-10-04T14:12:26.127 に答える