我正在构建一个简单的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)。
但是,如果我将this
和{ foo: 'bar' }
合并,它就起作用了。
有人能解释一下为什么会发生这种事吗?
住在https://jsbin.com/zupece/edit?js,控制台,输出
我认为NodeList
不支持Object.assign.所使用的get
你可以将其分配为一个复合:
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
时,这种可能性要小得多。