2

私はJavaScriptオブジェクトに取り組んでおり、その中には多くの変数が宣言されています。私がやりたいのは、親オブジェクトの別の子への参照です。次のオブジェクトが与えられます:

var clusters = {

    auxiliars: {
        environment         : "Development",
        local_storage_key   : "Cluster",

        iqns_class          : ".iqn",
        iqn                 : this.iqns_class.parent(),

        viewport            : $(window),

        viewport_width      : this.viewport.width(),
        viewport_height     : this.viewport.height(),

        plugin              : {
            containerID : "",
            first       : false,
            previous    : false,
            next        : false,
            last        : false,
            startPage   : 1,
            perPage     : 6,
            midRange    : 6,
            startRange  : 1,
            endRange    : 1,
            keyBrowse   : false,
            scrollBrowse: false,
            pause       : 0,
            clickStop   : true,
            delay       : 50,
            direction   : "auto",
            animation   : "fadeIn",
            links       : "title",
            fallback    : 1000,
            minHeight   : true,
            callback    : function(pages, items) {}
        }
    },

    set_local_storage_data: function(data_val) {
        return localStorage.setItem(auxiliars.local_storage_key, data_val);
    },

    get_local_storage_data: function() {
        return +(localStorage.getItem(auxiliars.local_storage_key) || 1);
    },

    set_environment: function(environment) {
        if(auxiliars.environment == "Development") {
            less.env = "development";
            less.watch();
        }
    },

    shop_iqns_selected_class: function() {
        if (auxiliars.viewport_width < 980) {
            $(auxiliars.iqns_class).each(function(index, element) {
                var element = $(element);
                $(auxiliars.iqn).on('click', function() {
                    if (element.hasClass('selected')) {
                        element.removeClass('selected');
                    } else {
                        element.addClass('selected');
                    }
                });
            });
        }
    },

    initiate_plugin: function(plugin_navigation, plugin_options) {
        var options = $.extend({}, auxiliars.plugin, plugin_options);
        return $(plugin_navigation).jPages(options);
    }

}

同じオブジェクトで宣言されthis.viewport.width()た変数をポイントしたいことに気付くでしょう。明らかにエラーが発生しますが、同じオブジェクトの子の値をどのように指定できますか?viewportauxiliars

4

3 に答える 3

3

JavaScript でそれを行う方法はありません。つまり、オブジェクト リテラルで構築されている「進行中」の要素を参照する方法はありません。

ただし、後続の割り当てステートメントでプロパティ (およびサブプロパティ) を参照できます。

var clusters = {

    auxiliars: {
        environment         : "Development",
        local_storage_key   : "Cluster",

        iqns_class          : ".iqn",
        iqn                 : this.iqns_class.parent(),

        viewport            : $(window),
        // ...

clusters.auxiliars.viewport_width = clusters.auxiliars.viewport.width();
clusters.auxiliars.viewport_height = clusters.auxiliars.viewport.height();
于 2012-05-14T12:56:58.400 に答える
3

最も簡単な方法は、自動参照属性をメソッドで変換することだと思います。

var clusters = {
  auxiliars: {
    viewport        : $(window),
    viewport_width  : function(){ return this.viewport.width() },
  }
}

clusters.auxiliars.viewport_width();

jsFiddle を確認する

于 2012-05-14T13:07:45.963 に答える
1

同じオブジェクト リテラルの他の部分で新しいオブジェクト リテラルの一部を参照することはできません。代わりに、これらのパーツを個別のステートメントで構築できます。

var clusters = ...;
clusters.auxiliars.viewport_height = clusters.auxiliars.viewport.height();
clusters.auxiliars.viewport_width = clusters.auxiliars.viewport.width();

エレガントではありませんが、それが唯一の方法だと思います。

于 2012-05-14T13:01:33.493 に答える