1

以下の JavaScript コードには、適切な変数宣言がありますか、またはそれを定義する他の方法がありますか? この変数宣言の方法を教えてください。

var JQFUNCS = {
  runFunc: {
    "jsonp": {
      run: function (id) {
        var demobox = $('#' + id);
        demobox.html('<img id="loading" src="images/loading.gif" />');
        $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
          tags: "jquery",
          tagmode: "any",
          format: "json"
        }, function (data) {
          demobox.empty();
          $.each(data.items, function (i, item) {
            demobox.append('<a href="' + item.link + '" target="_blank"><img style="max-width:150px;" src="' + item.media.m + '" alt="' + item.title + '" title="' + item.title + '" />');
            if (i == 10) return false;
          });
          $('#' + id + ' #loading').hide();
        });
      },
      reset: function (id) {
        $('#' + id).empty().hide();
      }
    }
  }
}
4

1 に答える 1

2

この変数宣言の方法は、オブジェクト リテラルと呼ばれます。

var objectLiteral = {
   propertyOne: 1,

   functionTwo: function() {
      return 2;
   }
};

用途:従来の方法で一緒に属するデータと機能をカプセル化するのに最適です。変数名が重複してグローバル名前空間が乱雑になるのを防ぎます。ただし、オブジェクトのコピー方法を使用しない限り、オブジェクトのインスタンスは 1 つしか提供されません。

関数宣言を使用することもできます。

function funcDeclaration() {
   this.propertyOne = 1;

   this.functionTwo = function() {
      return 2;
   }
}
var obj = new funcDeclaration();

用途:クラスと非常によく似た、オブジェクトのインスタンス化を可能にします。オブジェクトリテラルのすべての柔軟性に加えて、いくつかの柔軟性があります。

ここには正解も不正解もありません。その一部は、状況、慣習、または好みです。

2つを組み合わせて、自己実行関数を使用することで非常にトリッキーになることもできます(可視性修飾子をエミュレートしようとしている場合):

var objectLiteral = (function() {
    //currently within a self-executing function, syntax allows this

    var privatePropertyOne = 1;
    function privateFunctionTwo() { //yes, functions can contain other functions
        return 2;
    }

    //the self-executing function returns and object literal that contains references to the privately scoped items defined above.
    return {
        PropertyOne: function() { return privatePropertyOne; },
        FunctionTwo: privateFunctionTwo
    };  
})();

用途:プロで楽しい。=P 必ずしも読めるわけではなく、初心者の JavaScript 開発者の心を確実に吹き飛ばします。

于 2013-04-09T07:07:46.817 に答える