0

プロトタイプを始めたばかりで、開発中の Web サイトでさまざまなことをテストしようとしています。しかし、エラーに出くわしました。その理由はわかりません。以前にそのプロパティを使用していて、機能していたからです。

私は経験豊富な JavaScript 開発者ではありません。まだ学んでいますが、次のような結果が得られました。

var defaults = {
    local_storage_key   : "Cluster",
    plugin_navigation   : ".navigation",
    plugin_wrapper      : "content-wrapper",
    iqns_class          : ".iqn"
}

var Clusters = function(environment, options){

    this.options = $.extend({}, defaults, options);

    this.environment = environment;

    this.viewport = $(window);

    this.viewport_width = this.viewport.width();
    this.viewport_height = this.viewport.height();

    this.data_key = this.options.local_storage_key;

    this.iqns_class = this.viewport.find(this.options.iqns_class);

    this.iqn = this.iqns_class.parent();

    this.shop_initiated = false;

    this.plugin_navigation = this.options.plugin_navigation;

    this.plugin_wrapper = this.options.plugin_wrapper;

    this.initiate_plugin(this.plugin_navigation, {
        containerID : this.plugin_wrapper,
        first       : false,
        previous    : false,
        next        : false,
        last        : false,
        startPage   : this.get_local_storage_data(),
        perPage     : 6,
        midRange    : 15,
        startRange  : 1,
        endRange    : 1,
        keyBrowse   : false,
        scrollBrowse: false,
        pause       : 0,
        clickStop   : true,
        delay       : 50,
        direction   : "auto",
        animation   : "fadeInUp",
        links       : "title",
        fallback    : 1000,
        minHeight   : true,
        callback    : function(pages) {
            this.set_local_storage_data(pages.current);
        }
    });

    this.initiate_auxiliars();

    this.set_environment();

};

Clusters.prototype.set_local_storage_data = function(data_val) {
    return localStorage.setItem(this.data_key, data_val);
};

Clusters.prototype.get_local_storage_data = function() {
    return +(localStorage.getItem(this.data_key) || 1);
};

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

Clusters.prototype.initiate_plugin = function(plugin_navigation, plugin_options) {
    return $(plugin_navigation).jPages(plugin_options);
}

Clusters.prototype.initiate_auxiliars = function() {
    return this.shop_iqns_selected_class();
}

Clusters.prototype.set_environment = function() {
    if(this.environment == "Development") {
        less.env = "development";
        less.watch();
    }
}

var cluster = new Clusters("Development");

プロトタイピングについて間違っていることや誤解していることがあると確信しています。そうでなければ、エラーは発生しないからです。私が間違っていること、何をすべきか、すべきでないかについて、意見や指示を求めているだけです。

これは私が得るエラーです:

Uncaught TypeError: Object #<Object> has no method 'set_local_storage_data' on line 53
4

1 に答える 1

1

コールバック関数を使用しているため、thisキーワードはクラスターオブジェクトを参照しなくなります。コールバックは、「メソッド'set_local_storage_data'がない」他のコンテキストで実行されます。

これを回避するにはbind()、クラスターオブジェクトに対する関数を使用するか、コンストラクターのスコープでローカル変数を使用してクラスターオブジェクトを参照します。

var that = this;
this.initiate_plugin(
    ...,
    function(pages) {
        that.set_local_storage_data(pages.current);
    }
);
于 2012-05-14T00:30:53.780 に答える