Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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_Es6 Class - Fatal编程技术网

Javascript 使用';这';变量

Javascript 使用';这';变量,javascript,es6-class,Javascript,Es6 Class,我试图将一个类方法附加到一个元素,以便它引用该类的实例 //范例 class Default{ constructor(){ this.parent = null } assemble(){ var form = document.createElement('form'); //CREATE FORM ELEMENT var btn = document.createElement('button'); //CREATE

我试图将一个类方法附加到一个元素,以便它引用该类的实例

//范例

class Default{
    constructor(){
        this.parent = null
    }

    assemble(){
        var form = document.createElement('form'); //CREATE FORM ELEMENT
        var btn = document.createElement('button'); //CREATE BUTTON ELEMENT
        this.parent = form; //DECLARE PARENT (CONSTRUCTOR)
        btn.type = 'button';
        btn.innerHTML = 'click me';
        btn.addEventListener('click',this.submit);
        form.appendChild(btn);
        return form;
    }   
}

class Form extends Default{
    submit(){
        console.log(this.parent); //should return instantiated form value for property parent but doesn't (undefined)
        console.log(this); //returns reference to the button element itself not the class (Form)
    }
}
//叫

var route={
    init:()=>{      
        var form = new Form();
        var formBuild = form.assemble();
        document.body.appendChild(formBuild);
    }   
};
document.addEventListener('DOMContentLoaded',route.init);

问题:为什么表单类方法
submit()
返回的是按钮元素本身而不是实例化的类?

您的问题有点让人困惑,我用您的代码创建了一个表单类,一切都按照我的预期进行。你想要得到的结果到底是什么?@Dario我试图让按钮返回父元素,在本例中它将是表单元素
this.parent
,但
this
根本不引用实例化的对象。为了确保,在代码笔中,我链接了
this。父项
引用表单本身,但您希望
this
也返回表单?@Dario否,因此您的代码笔示例调用表单对象上的
submit
方法,我的示例通过按钮元素上的单击事件调用它。问题仅仅是如何绑定
submit
方法,以及调用时如何决定
btn.addEventListener('click',this.submit.bind(this))
Change btn.parent=form//声明父项(构造函数)代码中有什么更改吗?为什么这样做,为什么原始代码不起作用?请你的答案包括一个解释。Bergi,我改变了这个。parent=表单//向btn声明父级(构造函数)。父级=窗体;这个.parent到btn.parents但是为什么呢?现在它做错事了。
class Default{
    constructor(){
        this.parent = null
    }

    assemble(){
        var form = document.createElement('form'); //CREATE FORM ELEMENT
        var btn = document.createElement('button'); //CREATE BUTTON ELEMENT
        btn.parent = form; //DECLARE PARENT (CONSTRUCTOR)
        btn.type = 'button';
        btn.innerHTML = 'click me';
        btn.addEventListener('click',this.submit);
        form.appendChild(btn);
        return form;
    }   
}