当我克隆对象时,会显示一条错误消息 [英] When I make a clone of the object shows me an error message
问题描述
首先下面是我自己的javascript库的代码.
First the following is the code of my own javascript library.
(function() {
var lib = {
elems: [],
getElem: function() {
var tmpElem = [];
for (var i = 0; i < arguments.length; i++)
tmpElem.push(document.getElementById(arguments[i]));
this.elems = tmpElem;
tmpElem = null;
return this;
},
html: function(txt) {
for (var i = 0; i < this.elems.length; i++)
this.elems[i].innerHTML = txt;
return this;
},
style: function(prob, val) {
for (var i = 0; i < this.elems.length; i++)
this.elems[i].style[prob] = val;
return this;
},
addEvent: function(event, callback) {
if (this.elems[0].addEventListener) {
for (var i = 0; i < this.elems.length; i++)
this.elems[i].addEventListener(event, callback, false);
} else if (this.elems[0].attachEvent) {
for (var i = 0; i < this.elems.length; i++)
this.elems[i].attachEvent('on' + event, callback);
}
return this;
},
toggle: function() {
for (var i = 0; i < this.elems.length; i++)
this.elems[i].style.display = (this.elems[i].style.display === 'none' || '') ? 'block' : 'none';
return this;
},
domLoad: function(callback) {
var isLoaded = false;
var checkLoaded = setInterval(function() {
if (document.body && document.getElementById)
isLoaded = true;
}, 10);
var Loaded = setInterval(function() {
if (isLoaded) {
clearInterval(checkLoaded);
clearInterval(Loaded);
callback();
}
}, 10);
}
};
var fn = lib.getElem;
for(var i in lib)
fn[i] = lib[i];
window.lib = window.$ = fn;
})();
之前我用这种方式使用自己的库,效果很好.
Previously, I have used this way to use my own library, and works fine .
$.getElem('box').html('Welcome to my computer.');
但是当更新我自己库的代码时,我添加了
But when updated the code of my own library, and I added
var fn = lib.getElem;
for(var i in lib)
fn[i] = lib[i];
像这样使用元素选择器
$('box').html('Welcome to my computer.');
但是当添加更新的代码来克隆lib对象时,问题开始出现TypeError: $(...).html is not a function
.
But the problem began appear when added the updated code to clone the lib object TypeError: $(...).html is not a function
.
现在我想像这样使用元素选择器
And now I want to use the element selector like that
$('box').html('Welcome to my computer.');
代替
$.getElem('box').html('Welcome to my computer.');
推荐答案
您创建了一个引用getElem"的变量 fn,但由于 fn 不是您的 lib 对象的属性,因此这意味着当 getElem 引用这将是你的全局对象,可能是窗口.
You create a variable fn which has a reference to "getElem" but since fn is not a property on your lib object then it means that when getElem refers to "this" it will be you global object which is propbably window.
删除所有以下 3 行
var fn = lib.getElem;
for(var i in lib)
fn[i] = lib[i];
然后这样做
window.$ = function () { return lib.getElem.apply(lib, arguments); };
这将允许 getElem 作为 $ 调用,但将lib"作为上下文.
This will allow getElem to be called as $ but maintaining "lib" as context.
这篇关于当我克隆对象时,会显示一条错误消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!