美文网首页
模拟jQuery

模拟jQuery

作者: Wang_Yong | 来源:发表于2017-09-07 11:09 被阅读0次

    1.实现工厂函数

    var $ = function (id) {
        return document.getElementById(id)  
    }
    

    2.实现hide()

    在实现$("image1") 之后想要隐藏,如何。。。

    HTMLElement.prototype.hide = function(){
        this.style.display = 'none';
    }
    

    然而IE6-8不支持HTMLElement原型,我们使用Function原型扩展

    var F = function(){};
    F.prototype.hide = function(){
        this?.style.display = "none";
    };
    new F().hide();
    

    知识点

    只要new表达式之后的constructor返回return一个引用对象(数组,对象,函数),都将覆盖new创建的匿名对象。如果返回(return)一个原始类型(无return时其实为return原始类型undefined),那么就返回new创建的匿名对象。

    重新解释

    new F()如果没有返回值(Undefined类型),或返回值是5种基本型(Undefined类型、Null类型、Boolean类型、Number类型、String类型)之一,则new F()我们可以看成是原型扩展方法中的this; 如果返回是是数组啊、对象啊什么的,则返回值就是这些对象本身,此时new F() ≠ this。

    我们使用this间接调用

    var F = function(){
        this.element = document.getElementById(id)
    }
    
    F.prototype.hide = function(){
        this.element.style.display = 'none';
    }
    new F("image").hide()  //可以实现
    

    jQuery中实现链式调用 就是 return this

    暴露与重用元素的获取方法

    var F = function(id) {
        return this.getElementById(id);
    };
    F.prototype.getElementById = function(id) {
        this.element = document.getElementById(id);
        return this;
    };
    F.prototype.hide = function() {
        this.element.style.display = "none";
    };
    
    new F("image").hide(); 
    

    我还是喜欢$ , 不喜欢new

    var $ = function(id){
        return new F(id)
    }
    

    隐藏图片的代码可以是:

    $("image").hide()
    

    支持IE6-IE7

    未完待续···········

    相关文章

      网友评论

          本文标题:模拟jQuery

          本文链接:https://www.haomeiwen.com/subject/nhgbjxtx.html