事件创建中的javascript绑定对象

事件创建中的javascript绑定对象,javascript,html,events,bind,Javascript,Html,Events,Bind,事实上,我被一个简单的(很确定是这样的)例子困住了 首先 第二 var JSClass={ 元素:null, 单击:函数(){ console.log(this.element.id); }, 创建:函数(元素){ this.element=元素; this.element.addEventListener('click',this.click.bind(this)); } }; JSClass.created(document.querySelector('first'); JSClass.c

事实上,我被一个简单的(很确定是这样的)例子困住了

首先
第二
var JSClass={
元素:null,
单击:函数(){
console.log(this.element.id);
},
创建:函数(元素){
this.element=元素;
this.element.addEventListener('click',this.click.bind(this));
}
};
JSClass.created(document.querySelector('first');
JSClass.created(document.querySelector(“#second”);
通过在创建事件时绑定整个对象,我应该在单击第一个元素时获得“first”,在单击第二个元素时获得“second”,但事实并非如此。
对于我使用的其他对象,它是完全功能的,但这个简单的例子不起作用…

如果您希望对象的行为像类一样,可以使用如下函数闭包:

var JSClass=函数(元素){
this.element=元素;
元素addEventListener('click',click.bind(this));
函数单击(){
console.log(this.element.id);
}
};
新的JSClass(document.querySelector('first');
新的JSClass(document.querySelector(“#second”)
首先

其次,您不是在创建类,而是在创建对象

因此,每次对该对象调用
.created
,都会覆盖其中的元素

尝试使用
对象。创建
以创建两个不同的对象

var JSClass = {
    element : null,
    click : function() {
        console.log(this.element.id);
    },
    created : function(element) {
        this.element = element;
        this.element.addEventListener('click', this.click.bind(this));
    }
};

var first = Object.create(JSClass);
var second = Object.create(JSClass);

first.created(document.querySelector('#first'));
second.created(document.querySelector('#second'));

您可以使用
,将
此元素
设置为传递给构造函数的
元素

首先
第二
类JSClass{
构造函数(元素){
this.element=元素;
}
创建(){
这个元素
.addEventListener('click',this.click.bind(this));
}
单击(){
console.log(this.element.id);
}
};
let first=newjsclass(document.querySelector(“#first”);
let second=新的JSClass(document.querySelector('#second');
首先,创建();
第二,创建();

只涉及一个对象。当您第二次调用
.created()
时,它会覆盖您第一次调用时设置的“element”属性的值。将
JSClass
更改为返回对象的函数。谢谢,我认为这是最好的现代方法。您对“类”与“对象”的看法是正确的。这是我这边的错误。在我的描述中,我只谈到对象,对象的名称是JSClass;)
var JSClass = {
    element : null,
    click : function() {
        console.log(this.element.id);
    },
    created : function(element) {
        this.element = element;
        this.element.addEventListener('click', this.click.bind(this));
    }
};

var first = Object.create(JSClass);
var second = Object.create(JSClass);

first.created(document.querySelector('#first'));
second.created(document.querySelector('#second'));