无法使用Prototype扩展我的javascript对象

时间:2013-04-20 12:31:14

标签: javascript

我有这段代码:

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

未捕获的TypeError:无法调用未定义的方法'apply'     } else {       $ .error('方法'+方法+'在jQuery.flippable上不存在');     }

};

它在线:

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

_init未定义。

2 个答案:

答案 0 :(得分:2)

原型函数只能通过类的对象访问。而不是班级本身。 这样可行。

var oFlip = new Flippable();
oFlip.foo();

答案 1 :(得分:0)

你尝试使用.apply调用foo的方式,你将不得不这样做。

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

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

相关问题