我有一个奇怪的问题,我似乎无法解决!它是我正在编写的一个大框架的一部分,但我写了一些具有相同问题的测试代码。请参阅以下内容:
!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查看返回的对象,它只有选择器元素,这是有意义的,因为我没有使用原型。我该如何解决这个问题?
答案 0 :(得分: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;
您在创建的测试实例上错过了构造函数和原型链。
答案 1 :(得分:0)
就我而言,该错误是在添加集成测试时发生的,并且我没有注意到我尝试调用的函数属于一个模拟类。很容易感到困惑,因为在尝试导航时(我正在使用IntelliJ),IDE会转到已实现的功能。
模拟错误中提到的功能可以解决此问题。