2016-03-30 15 views
0

ile bu Object.assign. Benim unsurları ile bu birleştirmek çalışıyorum, jQuery benzer ES6 ben basit DOM yarar kütüphane inşa ediyorum nodelist

class jQuery { 

    constructor(selector) {    
     let elements = document.querySelectorAll(selector); 
     Object.assign(this, elements); 
    } 
} 

let $ = selector => new jQuery(selector); 

console.log($('h1')); 

, her iki tür nesnelerdir ancak sonuçlar onun sadece boş bir nesne (bu).

Ama { foo: 'bar' } onun çalışma ile this birleştirme eğer. Bu neden oluyor

Birisi bana açıklayabilir misiniz? https://jsbin.com/zupece/edit?js,console,output

+1

'Object.assign (bu, {elemanları});' sadece cevap – NaN

cevap

1

de

Canlı

Ben NodeList Object.assign tarafından kullanılır siz istediğiniz yolu, get desteklemediğini düşünüyorum.

sadece bir kompozit olarak atayabilirsiniz:

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)); 
     } 
    } 
} 

Zaten bu daha OOP olduğunu. Ayrıca, çeşitli JavaScript motorları artık daha iyi performans için kodunuzu optimize etmeye çalışabilir. Bu Object.assign kullanırken çok daha az olasıdır.

+0

teşekkür atıyorsanız ama yapıcı ile birleştirme yoksa, o zaman benim sınıftaki diğer yöntemlerine erişmek olamaz dizi benzeri için bir anahtar sağlayabilir Eklemek istediğiniz sınıf \ – Hiero

+0

için – Hiero

+0

@Hiero Ofcourse gibi düzenleme konusuna bakın. . – Tim

İlgili konular