6

我有一个奇怪的问题,我似乎无法解决!它是我正在编写的一个大框架的一部分,但我编写了一些具有相同问题的测试代码。请参阅以下内容:

!function ($, window, undefined) {

    // BASE FUNCTION
    var test = function (selector, context) {
        return new test.fn.init(selector, context);
    };

    // SELECTOR FUNCTIONS
    test.fn = {
        selector:   undefined,
        init:       function (selector, context) {
            // Use jQuery to build selector object
            this.selector = $(selector, context);
            return this;
        },

        // Create a popup dialog
        popup:      function (options) {
            this.selector.dialog();
        }
    },

    // Expose Carbon to the global object
    window.test     = test;

}(window.jQuery, window);

现在,当我使用以下内容时:

test('#popupLink').popup();

我得到“TypeError: test("#popupLink").popup 不是函数”。我知道它部分工作,因为如果我执行以下操作,我可以使用标准 jQuery 函数:

test('#popupLink').selector.hide();

任何帮助将不胜感激,因为我现在有精神障碍。提前致谢!:)

更新

我使用 console.log 查看返回的对象,它只有选择器元素,这很有意义,因为我没有使用原型。我该如何解决?

4

2 回答 2

3
(function ($, window) {
    // BASE FUNCTION
    var test = function (selector, context) {
        return new test.fn.init(selector, context);
    };

    // SELECTOR FUNCTIONS
    test.fn = test.prototype = {
        constructor: test,
        init: function (selector, context) {
            // Use jQuery to build selector object
            this.selector = $(selector, context);
            return this;
        },

        // Create a popup dialog
        popup: function (options) {
            console.log('popup');
            return this;
        }
    };

    // Expose test to the global object
    window.test = test;
}(window.jQuery, window));

test.fn.init.prototype = test.fn;

您错过了创建的 test 实例上的构造函数和原型链。

于 2012-06-19T21:44:03.960 回答
0

在我的情况下,错误是在添加集成测试时,我没有注意到我试图调用的函数属于一个模拟类。很容易混淆,因为在尝试导航时(我使用的是 IntelliJ),IDE 会转到已实现的功能。

模拟错误中提到的功能解决了这个问题。

于 2020-08-10T11:41:09.347 回答