0

我不确定如何在 jQuery Plugin 中调用该函数。我正在尝试做一些像社交分享器这样的小东西,这将是我的第一个插件,但我很困惑。

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();
        };
    }

好吧,我的问题是如何在 init 下面的其他函数中调用该函数... this._functionName(); 只适用于 init 而不是它下面的函数。提前致谢。

4

1 回答 1

1

它应该如下所示,因为当您在变量中调用with_echoCookie时可能指向不同的上下文。所以使用闭包变量来保存对主对象的引用并在里面使用它_echoEventsthisgoogleCB

_echoEvents: function () {
    var that = this;
    googleCB = function() {
        that._echoCookie();
    };
},
_echoCookie: function () {
    $.cookie('echoSoc', 'done', { expires: 30, path: '/' });
    console.log('cookie added');
}
于 2013-04-28T12:43:52.410 回答