2013-04-28 67 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

相关问题