jquery对象 - 函数未定义错误

时间:2014-10-11 06:15:21

标签: javascript jquery

在以下函数中,我在floatShareBar函数中的对象是未定义的。我必须在函数之前初始化或定义var吗?它抛出我js错误:.float - 函数未定义。

   (function($) {
.
.
.

    $("body").on("ab.snap", function(event) {
        if (event.snapPoint >= 768) {
            floatShareBar.float()
        } else {
            floatShareBar.unfloat();
        }
    });

    var floatShareBar = function() {
        var fShareBar = $('#article-share');

        this.float =  function() {
            console.log(
        };
        this.unfloat = function() {
            console.log("unfloat");
        };
    };
.
.
.

})(jQuery);

2 个答案:

答案 0 :(得分:1)

您需要通过自我实例化调用获取该函数的实例:

var floatShareBar = (function() {
    var fShareBar = $('#article-share');

    this.float =  function() {
        console.log('float');
    };
    this.unfloat = function() {
        console.log("unfloat");
    };

    return this;
})();

更新1:我修改它以在函数中创建一个对象来附加这些函数,因为在上一个示例中this引用了window对象

var floatShareBar = (function() {
    var fShareBar = $('#article-share');
    var instance = {};

    instance.float =  function() {
        console.log('float');
    };
    instance.unfloat = function() {
        console.log("unfloat");
    };

    return instance;
})();

更新2:您实际上也可以使用new关键字,look here for more info

var floatShareBar = new (function() {
    var fShareBar = $('#article-share');

    this.float =  function() {
        console.log('float');
    };
    this.unfloat = function() {
        console.log("unfloat");
    };
})();

答案 1 :(得分:-1)

将您的功能更改为:

$("body").on("ab.snap", function(event) {
        if (event.snapPoint >= 768) {
            (new floatShareBar()).float()
        } else {
            (new floatShareBar()).unfloat();
        }
    });

function floatShareBar () {
        var fShareBar = $('#article-share');

        this.float =  function() {
            console.log(
        };
        this.unfloat = function() {
            console.log("unfloat");
        };
    };

在调用它们之前,应该使用 var 来声明函数。