我一直在开发一个名为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();')
”。
有人知道我的代码做错了什么吗?我怎样才能纠正错误?非常感谢!
发布于 2013-10-13 17:03:13
在我看来,问题是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?!?!?!';
}
}
https://stackoverflow.com/questions/19352018
复制相似问题