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

Uncaught TypeError: Undefined のメソッド 'apply' を呼び出せません } 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 に答える