javascript - 关于zepto源码里面实例化的问题。
ringa_lee
ringa_lee 2017-04-10 16:14:21
[JavaScript讨论组]

最近在学习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他还是可以实例化?

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
迷茫
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"就输出啦

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号