叶子

闲言碎语

学学jquery源码

那天面试还有一题,同样没实现出来。大概如下:

var Do;
//代码开始
//-----代码部分
//代码结束
var a = Do("aa");
a.bt("bt");

补全代码,实现a.bt输出结果为aabt。

如果是var a = new Do(“aa”),那么直接定义Do为函数,给Do添加方法即可。可是没有new,那么就需要自己构造增强函数了。之前看过点jquery源码,但是没留意这个=_=。今天把jq的翻出来复看,发现了这个秘密…

var Do;
//代码开始
Do = function(a) {
     return new Do.fn.init(a);
};
Do.fn = Do.prototype = {
     temp: "",
     init: function(a) {
            this.temp = a;
            return this;
     },
     bt: function(b) { document.write(this.temp + b ) }
}
Do.fn.init.prototype = Do.fn;
//代码结束
var a = Do("aa");
a.bt("bt");

jq对应的是

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;