关于zepto源码里面实例化的问题。

发布于 2022-09-01 21:07:38 字数 870 浏览 15 评论 0

最近在学习zepto的源码,遇到了一些问题,请教一下。这是一版zepto.js的源代码。(见链接)
链接描述
在它里面是这样实例化的。

zepto.Z = function(dom, selector) {
    return new Z(dom, selector)
  }

使用了new将类实例化。这个我理解。
但是我看过一版zepto,他是整体大概是这样写的。

/* 我是一个类 */
    var Klass = (function(){
        var $ = function(){};
        $.fn = $.prototype;
        $.fn = {
            map: function() {
                console.log("this is map");
            },
            param: "param"
        }
        var Z = function(){
            return $.fn;
        }
        return Z;
    })();

    window.Klass = Klass;
    '$' in window || (window.$ = Klass);
    // 执行函数
    $().map();//输出this is map

运行正常。但是我没想明白,为什么没有new他还是可以实例化?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

赤濁 2022-09-08 21:07:38
var Klass = (function(){
        var $ = function(){};
        $.fn = $.prototype;
        $.fn = {
            map: function() {
                console.log("this is map");
            },
            param: "param"
        }
        var Z = function(){
            return $.fn;
        }
        return Z;
    })();

执行完后,Klass指向闭包环境下的函数对象 Z,‘$’ in window || (window.$ = Klass); 因为$不为window的属性,所以(window.$ = Klass)被执行,此时 window.$指向Klass函数对象,也就是Klass闭包中的Z函数,$().map()就是执行Z().map(),Z函数返回$.fn,那么最终执行的就是$.fn.map函数,"this is map"就输出啦

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文