Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 此关键字未按预期工作_Javascript_Oop - Fatal编程技术网

Javascript 此关键字未按预期工作

Javascript 此关键字未按预期工作,javascript,oop,Javascript,Oop,标题可能不正确,但我不知道如何提问 我正在努力学习用JavaScript编写面向对象的代码,我正在重写我的一个项目,这样我就可以使用类的方法,而不是使用很多匿名函数和重复的代码。现在,我面临以下代码的错误: var cart = { cartModal: $("#cart-modal"), $checkboxes: this.cartModal.find("input[name=check]"), // ^^^^^^^^^^^^^^ toggl

标题可能不正确,但我不知道如何提问

我正在努力学习用JavaScript编写面向对象的代码,我正在重写我的一个项目,这样我就可以使用类的方法,而不是使用很多匿名函数和重复的代码。现在,我面临以下代码的错误:

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,糟糕的场景)。在这种情况下,使用对象构造函数怎么样。