1

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

有谁知道我在代码中做错了什么?如何修复错误?非常感谢!

4

1 回答 1

0

在我看来,问题在于tex("#test")返回一个text.init对象,但.dit()它是一个方法 on tex,而不是 ontex.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?!?!?!';
            }
        }
于 2013-10-14T01:03:13.323 回答