2013-10-14 6 views
1

Я разрабатываю библиотеку javascript под названием TechX. Вот код:Ошибка Javascript при вызове функции библиотеки javascript

(function(){ 
     function tex(s){ 
      return new tex.init(s); 
     }; 
     //declare the init selector function 
     tex.init = function(s){ 
      if(!s){ 
       return this; 
      } 
      else{ 
       this.length = 1; 
       if (typeof s === "object"){ 
        this[0] = s; 
       } 
       else if(typeof s === "string"){ 
        var obj; 
        obj = document.querySelector(s); 
        this[0] = obj; 
       } 
       return this; 
      } 
     } 
     tex.prototype = { 
      dit : function(){ 
       this.innerHTML = 'Hi?!?!?!'; 
      } 
     }; 
     window.tex = tex; 
})(); 

В моем теле есть этот сценарий, чтобы проверить это:

<input type="button" id="inpt" value="click"></input> 
<div id="test"></div> 
<script> 
var inn = document.getElementById("inpt"); 
inn.onclick = function(){ 
    tex('#test').dit(); 
}; 
</script> 

Когда я загружаю страницу нет никаких ошибок, но когда я нажимаю на кнопку Я получаю ошибка, которая говорит: «'undefined' is not a function (evaluating 'tex('#test').dit();')».

Кто-нибудь знает, что я сделал неправильно в своем коде? Как я могу исправить ошибку? Спасибо огромное!

ответ

0

Он смотрит на меня как проблема в том, что tex("#test") возвращает text.init объекта, но .dit() является методом на tex, а не на tex.init так что нет никакого способа .dit() выполнить.

Может быть, вы хотите изменить:

tex.prototype = {...} 

к этому:

tex.init.prototype = {...} 

поэтому метод .dit() будет на тип объекта, на самом деле вы создаете.


Кроме того, я думаю, что это:

 dit : function(){ 
      this.innerHTML = 'Hi?!?!?!'; 
     } 

потребности быть таким:

 dit : function(){ 
      this[0].innerHTML = 'Hi?!?!?!'; 
     } 

или, если вы собираетесь, чтобы он работал, как JQuery, вам придется перебирать над всеми содержащимися здесь объектами:

 dit : function(){ 
      for (var i = 0; i < this.length; i++) { 
       this[i].innerHTML = 'Hi?!?!?!'; 
      } 
     } 
+0

Хорошо, я пробовал это и не было никакой ошибки, но ничего не случилось с div. –

+1

@CodeApprentice - не 'this.innerHTML = 'Привет?!?!?!';' Должен быть 'this [0] .innerHTML = 'Привет?!?!?!';' Или если вы делая это как jQuery, то вам нужно применить метод ко всем объектам массива. – jfriend00

+1

Я хотел бы сделать это способом jQuery, но как применить метод ко всем объектам? –

Смежные вопросы