模拟jQuery

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,073评论 19 139
  • 今天朋友圈里被演唱会刷屏了,来北京好多年,只看过刘德华的演唱会,2013.11.1号,在五棵松体育馆,兴奋了许久...
    轻舞飞飞扬阅读 1,607评论 0 0
  • 蜗牛精华6件套
    范红岩阅读 1,247评论 0 0
  • 今天为了写学而思我一股脑的用我可怜的时间看完了徐静蕾的主导主演的电影一个陌生女人的来信,随着徐静凄美的那封信的旁白...
    gxl水月亮阅读 1,180评论 0 0

友情链接更多精彩内容