关于zepto源码里面实例化的问题。
最近在学习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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
执行完后,
Klass
指向闭包环境下的函数对象 Z,‘$’ in window || (window.$ = Klass);
因为$不为window的属性,所以(window.$ = Klass)
被执行,此时window.$
指向Klass函数对象,也就是Klass
闭包中的Z函数,$().map()
就是执行Z().map(),Z函数返回$.fn,那么最终执行的就是$.fn.map
函数,"this is map"
就输出啦