【发布时间】:2016-11-15 21:30:25
【问题描述】:
我正在尝试将对 jQuery 对象的引用传递给模块,并且收到一条错误消息:Uncaught TypeError: undefined is not a function
我正在编写fiddle 来尝试理解我看到的这种模式,以及理解原型和新关键字。
我不确定是什么导致了这个错误。这是我的HTML 和JavaScript 以及fiddle。
HTML:
<div class="js-container" data-options="true"></div>
<div class="js-container" data-options="false"></div>
JavaScript:
$('.js-container').each(function (i, element) {
new MyClass($(element));
console.log($(element));
});
var MyClass = (function ($element) {
this.$element;
console.log(this.$element);
this.init();
MyClass.prototype.init = function () {
this.addText();
return this;
};
MyClass.prototype.addText = function () {
var optText = this.$element.attr('data-options');
this.$element.text(optText);
return this;
};
}());
我正在努力学习使用JavaScript 编写更多模块。因此,如果我还有其他不正确的地方,请告诉我。谢谢!
【问题讨论】:
-
以
$element为参数的函数会立即执行,但您没有传递任何参数。并且this.$element不存在,因此undefined。你把事情搞混了…… -
提示:
MyClass的值是多少? (该值是调用匿名函数的结果 - 请注意接近末尾的()。) -
感谢 elclanrs 和 user2864740。我在想这是因为我没有在结尾处传递对 () 的任何引用。但我也认为调用 new MyClass($(element)) 会将 jQuery 选择器传递给 MyClass。您将如何将元素传递给 MyClass? new 关键字是我试图理解的新内容。
-
我编辑了我的问题以更好地解释我想要学习的内容。我看到了一个与我发布的类似的模式,并试图理解一些我读过但没有太多实践的概念。比如新的关键字和原型。
标签: javascript jquery