对象.将其分配给NodeList



我正在构建一个简单的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时,这种可能性要小得多。

最新更新