当我克隆对象时,会显示一条错误消息 [英] When I make a clone of the object shows me an error message

查看:57
本文介绍了当我克隆对象时,会显示一条错误消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先下面是我自己的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆