在jQuery中使用了一个工厂方法来创建一个实例,这个方法位于jQuery.prototype中, 现在我们重新来定义Shaka.prototype, 给它添加一个init方法用于返回一个Shaka的实例, 并且把Shaka的构造函数稍稍改变一下:
var Shaka = function(age) { return new Shaka.fn.init(age); };
Shaka.fn = Shaka.prototype = { init: function(age) { this.age = age; return this; }, sayHello: function() { alert('I am a little baby, my age is ' + this.age + ' years old.'); } };
Shaka.fn.init.prototype = Shaka.fn;//这里new Shaka.fn.init(age)创建的对象具有init方法的prototype指向对象的方法 , 因此我们将init方法的prototype指向 Shaka的prototype, 这样创建出来的对象就具有了Shaka.prototype里面定义的方法。
OK,现在我们的小宝宝变成大一点的宝宝了,打个招呼先:
运行代码框 [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
嗯,好象有点样子了,但是光这样还不行,来点实际的, 我们在新框架中实现jquery里val()方法的部分功能,这个方法不加参数调用时返回指定ID的input的值,加参数时为设定这个input的值,与jQery一样,我们约定使用id来查找对象时使用"#"符号。把要查找的目标ID作为构造函数的参数传进去,我们给Shaka.prototype添加一个val()方法, 给Shaka添加一个selector的属性用于存储我们要查找的目标。
Shaka.fn = Shaka.prototype = { init: function(selector) { this.selector = selector; return this; }, val: function(newValue) { //方法实现代码 } }; var Shaka = function(selector) { return new Shaka.fn.init(selector); };
运行代码框 [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
出处:蓝色理想
责任编辑:bluehearts
上一页 从零开始写jQuery框架 [1] 下一页 从零开始写jQuery框架 [3]
◎进入论坛网页制作 、WEB标准化 版块参加讨论,我还想发表评论 。