2012-05-13 3 views
0

私はプロトタイプを使い始めています。私が開発しているウェブサイトでさまざまなことを試してみようとしています。しかし、私は間違いを見つけたので、私はなぜそのプロパティを使用していたので、なぜそれが働いたのかわかりません。タイププロトタイプ使用時のエラー

私は経験豊富な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 

答えて

1

this keywordはそれ以上のクラスタオブジェクトを参照しません。コールバックは "set_local_storage_data 'メソッドがない他のコンテキストで実行されます。それを避けるために

、次のいずれかを実行でき、クラスタオブジェクトにbind()機能、またはクラスタオブジェクトを参照するには、コンストラクタのスコープ内のローカル変数を使用します。

var that = this; 
this.initiate_plugin(
    ..., 
    function(pages) { 
     that.set_local_storage_data(pages.current); 
    } 
); 
関連する問題