Object.Objectign与NodeList一起使用

时间:2016-03-30 19:05:56

标签: javascript jquery ecmascript-6 babeljs

我正在构建一个简单的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' }合作。

有人可以解释一下为什么会这样吗?

住在https://jsbin.com/zupece/edit?js,console,output

1 个答案:

答案 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时,这种情况要小得多。