0

我有这个代码:

var Flippable = function( options, element ) {
    this.$el    = $( element );
    this._init( options );
};

Flippable.prototype     = {
    _init               : function( options ) {

        this.options        = $.extend( true, {}, $.Flips.defaults, options );
        this.$pages         = this.$el.children( 'div.f-page' );
        this.pagesCount     = this.$pages.length;
        this.History        = window.History;
        this.currentPage    = this.options.current;
        this._validateOpts();
        this._getWinSize();
        this._getState();
        this._layout();
        this._initTouchSwipe();
        this._loadEvents();
        this._goto();

    },
    foo: function(){alert("foo");}
}

但是当我调用 Flipppable.foo() 时,我得到了未定义。我的语法关闭的任何想法?

谢谢!

克里斯

** 更新 **

我正在创建一个这样的插件:

$.fn.flippable = function( method ) {

// Method calling logic
if ( Flippable[method] ) {
  return Flippable[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
  return Flippable._init.apply( this, arguments );

未捕获的类型错误:无法调用未定义的方法“应用”} else { $.error('方法'+方法+'不存在于 jQuery.flippable'); }

};

它在线上很糟糕:

return Flippable._init.apply( this, arguments );

_init 未定义。

4

2 回答 2

2

原型函数只能通过类的对象访问。而不是班级本身。这会奏效。

var oFlip = new Flippable();
oFlip.foo();
于 2013-04-20T12:34:15.857 回答
0

您尝试使用 .apply 调用 foo 的方式必须这样做。

Flippable.prototype.foo.apply( this, arguments );

具有 foo 属性的对象是 Flippable 上的原型,而不是 Flippable 本身。

于 2013-04-20T12:39:21.000 回答