2013-04-28 69 views
0

我不知道如何調用jQuery插件中的函數。 我正在嘗試使社交分享器這個小東西,這將是我的第一個插件,但我很困惑。jQuery插件 - 調用函數返回未捕獲TypeError

Uncaught TypeError: Object [object Object] has no method '_echoCookie' 

這裏是做什麼的?

function EchoSoc(element, options) { 
    this.element = element; 

    this.options = $.extend({}, defaults, options); 
    this._defaults = defaults; 
    this._name = pluginName; 
    this.init(); 
} 

之後,我們有一些東西到init: function() { }如:

$('body').append(//--> 
       '<div id="fb-root" />' 
      + '<script>(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return;js = d.createElement(s); js.id = id;js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";fjs.parentNode.insertBefore(js, fjs);}(document, "script", "facebook-jssdk"));</script>' 
      + '<script src="//platform.twitter.com/widgets.js"></script>' 
      + '<script src="//apis.google.com/js/plusone.js"></script>' 
      // <-- 
      ); 

而且因爲這是谷歌測試的樣品這裏的最後一張:

$('.echoGoogle').append('<g:plusone size="medium" href="' + this.options.google_url + '" callback="googleCB"></g:plusone>'); 

然後我們有以下功能:

_echoEvents: function() { 
     googleCB = function() { 
      this._echoCookie(); 
     }; 
    }, 
    _echoCookie: function() { 
     $.cookie('echoSoc', 'done', { expires: 30, path: '/' }); 
     console.log('cookie added'); 
    } 

但這根本行不通......

_echoEvents: function() { 
     googleCB = function() { 
      this._echoCookie(); 
     }; 
    } 

那麼我的問題是,如何調用下面初始化等功能中的功能... this._functionName();只適用於init,不在其下面的函數中。 在此先感謝。

+0

你能分享如何'_echoCookie'和'_echoEvents'被稱爲 – 2013-04-28 12:45:35

+0

echoCookie被suppoused被事件中調用。和_echoEvents在init中調用:function() – dvLden 2013-04-28 12:46:59

+1

@NenaddvL我可以建議你看看http://dev.opera.com/articles/view/javascript-best-practices/?我看到你依賴於一些全局變量,這是非常糟糕的。 – plalx 2013-04-28 13:13:19

回答

1

應該如下因爲給出的,當你調用_echoCookie_echoEventsthis變量可能會指向不同的上下文。因此,使用閉包變量來保存引用的主要對象,並用它裏面googleCB

_echoEvents: function() { 
    var that = this; 
    googleCB = function() { 
     that._echoCookie(); 
    }; 
}, 
_echoCookie: function() { 
    $.cookie('echoSoc', 'done', { expires: 30, path: '/' }); 
    console.log('cookie added'); 
} 
+0

現在我很困惑。這實際上起作用。感謝您的解釋......儘快檢查正確的答案。 – dvLden 2013-04-28 12:46:21

+0

@plalx對不起,修好了 – 2013-04-28 12:50:04

相關問題