Javascript 此关键字未按预期工作
标题可能不正确,但我不知道如何提问 我正在努力学习用JavaScript编写面向对象的代码,我正在重写我的一个项目,这样我就可以使用类的方法,而不是使用很多匿名函数和重复的代码。现在,我面临以下代码的错误:Javascript 此关键字未按预期工作,javascript,oop,Javascript,Oop,标题可能不正确,但我不知道如何提问 我正在努力学习用JavaScript编写面向对象的代码,我正在重写我的一个项目,这样我就可以使用类的方法,而不是使用很多匿名函数和重复的代码。现在,我面临以下代码的错误: var cart = { cartModal: $("#cart-modal"), $checkboxes: this.cartModal.find("input[name=check]"), // ^^^^^^^^^^^^^^ toggl
var cart = {
cartModal: $("#cart-modal"),
$checkboxes: this.cartModal.find("input[name=check]"),
// ^^^^^^^^^^^^^^
toggleModal: function(e) {
this.cartModal.modal('toggle');
this.handleCheckboxes();
e.preventDefault();
},
handleCheckboxes: function() {
this.cartModal.find("input.checkall").click(function() {
$checkboxes.prop("checked", !$checkboxes.prop("checked"));
});
}
};
$("#cart-link").click(function(e) {
cart.toggleModal(e);
});
但我一直面临着这个错误:
TypeError: this.cartModal is undefined
我应该使用其他任何东西来使用对象内的属性吗?或者问题出在其他地方?在创建元素时无法访问该元素。使用函数应该有效
$checkboxes: function(){return this.cartModal.find("input[name=check]")},
但您也可以使用对象构造函数。在这里,您可以使用this.
引用正在创建的对象
function YourObject() {
this.$checkboxes = this.cartModal.find("input[name=check]");
.......
}
问题出现在这里:
$复选框:this.cartmodel.find(“输入[name=check]”,
此
不是指购物车
,而是指当前范围此
,当您这样声明它时,您不能指当前对象
最好是:
var modal = $("#cart-modal"),
cart = {
cartModal: modal,
$checkboxes: modal.find("input[name=check]")
...
}
问题是你不能在对象定义时引用它。@FelixKling那么如果我不能在对象定义中使用它,
这个
有什么用呢?我什么时候可以使用它?@faridv-主要是在用作方法的函数中(例如,与示例代码中的this
的所有其他用法一样)。您可以在对象的方法中使用它来引用对象。或者引用事件处理程序中的目标元素。或构造函数中的新对象。还有更多这个
确实存在(除非您处于严格模式并且没有做任何事情来设置上下文),它只是不引用正在构造的对象文本。我立即更新了我的答案。别这么快了:普华永道为什么不投票?我的回答立即得到纠正。甚至在评论发布之前。但OP没有说他希望$checkbox
成为一种方法。这就是你在这里做的。他必须购物车。$checkbox()
才能访问它。它每次都会查询DOM(使用jQuery,糟糕的场景)。在这种情况下,使用对象构造函数怎么样。