2016-08-23 5 views
0

У меня есть код:как иметь два объекта Javascript

function webdata(){ 
    this.page = function(e){ 
    return document.querySelectorAll(e); 
    this.append = function(t){ 
     e.innerHTML += t; 
    } 
    }; 
} 

var wb = new webdata(); 

, когда я когда-либо по телефону: wb.page("html").append("Text");

я получаю: TypeError: wb.page(...).append is not a function

Мне нужен способ иметь объект внутри объекта как jQuery. например $("html").append("Text");

+0

jQuery использует концепцию цепочки, проверьте это [ссылка] (http://schier.co/blog/2013/11/14/method-chaining-in-javascript.html) – Abanoub

+1

Ну, вы вернете коллекцию html, и кода после того, как он никогда не запускается. И после этого 'e' является строкой, а строка не имеет innerHTML. Вам нужно будет вернуть объект с вашим методом. – epascarello

+0

Переместить 'this.append = function (t) { e.innerHTML + = t; } 'наружу this.page. Тогда он будет работать без ошибок. Невозможно гарантировать выход. –

ответ

0

Пара ошибок

  1. return document.querySelectorAll(e); возвращается NodeList к функции страницы, где NodeList не имеют append метод
  2. this.append никогда не дозвонились

Вы можете изменить код, как показано ниже которые могут работать

function webdata(){ 
    this.page = function(e){ 
    e = document.querySelectorAll(e); // Get All Nodes 
    this.append = function(t){ 
     e.forEach(function(elm){ // Perform operation on each node and append text to that node 
     elm.innerHTML += t; 
     }); 
     return this; // Provide chaining for next nodes .append('abc').append('pqr') 
    } 
    return this; // .page('div').append will be availabel 
    }; 
} 

var wb = new webdata(); 
//Now this will work 
wb.page(".question-hyperlink").append('abc').append('pqr'); 
+0

Я получаю ошибку 'TypeError: e.forEach не является функцией' –

+0

Я протестировал на Chrome 52.0.2743.116, отлично работает – JagsSparrow

+0

Im using firefox v. 48.0.2 –