我正在构建一个简单的DOM实用程序库,类似于jQuery是ES6。
class jQuery {
constructor(selector) {
let elements = document.querySelectorAll(selector);
Object.assign(this, elements);
}
}
let $ = selector => new jQuery(selector);
console.log($('h1'));
我试图将它与我的元素合并,两种类型都是对象,但结果只是一个空对象(这)。
但是,如果我合并this
与{ foo: 'bar' }
合作。
有人可以解释一下为什么会这样吗?
答案 0 :(得分:1)
我认为NodeList
不支持get
您想要的方式,Object.assign使用它。
您可以将其指定为复合材料:
class jQuery {
constructor(selectorOrElement) {
this.elements = selectorOrElement instanceof HTMLElement ? [selectorOrElement] : document.querySelectorAll(selector);
}
addClass(className) {
this.elements.forEach(function (element) {
element.classList.push(element);
});
}
each(callback) {
for (var i = 0; i < this.elements.length; i++) {
var scope = this.elements[i];
callback.call(scope, i, new jQuery(scope));
}
}
}
无论如何,这是更多的OOP。此外,各种JavaScript引擎现在可以尝试优化代码以获得更好的性能。使用Object.assign
时,这种情况要小得多。