调用javascript库函数时出现Javascript错误

时间:2013-10-14 00:52:08

标签: javascript

我一直在开发一个名为TechX的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();')。”

有人知道我的代码中出错了吗?我该如何修复错误?非常感谢你!

1 个答案:

答案 0 :(得分: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?!?!?!';
            }
        }