我已经阅读了一段时间的jQuery插件,并尝试以更加oop的方式实现我们的插件。 我的经理是一个c#guy,讨厌jQuery UI调用方法的方式。 我想用下面的方法,想知道你对它的看法。 告诉我我正在尝试使用的优缺点。 好吧,这是一个简单的sample.it可以做但是开始:
if(typeof Object.create !== 'function')
{
Object.create = function(o)
{
function F()
{
}
F.prototype = o;
return new F();
};
}
var Car = (function()
{
var openDoor = function(doorNum)
{
alert("door #" + doorNum + " opened");
};
return {
openDoor: openDoor
};
}
)();
(function($, window, document, undefined)
{
$.fn.car = function(options)
{
if(this.length)
{
return this.each(function() {
var myCar = Object.create(Car);
$.data(this, 'car', myCar);
for(var prop in Car)
{
if($.fn[prop] == null)
{
$.fn[prop] = function(params)
{
return this.each(function () {
if($.data(this, "car") == null)
{
throw Error("not implemented function");
}
$.data(this, "car")[prop](params);
}
);
};
}
}
});
}
};
})(jQuery, window, document);
$("#test").on("click", function()
{
$("#test").car().openDoor(1).css({color: 'red'});
});
这里是小提琴链接 http://jsfiddle.net/6zHP7/8/
答案 0 :(得分:1)
伟大的事业!我和你的老板有同样的怪癖,我觉得jQuery的插件界面不足以支持高级插件。
我已经为此目的启动了一个GitHub项目:为jQuery插件提供更多的OOP API,同时保持向后兼容。
https://github.com/adamovsky/jQuery-Plugin-Pattern
我也开始撰写一篇将随之发布的博客文章:
http://milan.adamovsky.com/2012/12/jquery-plugin-pattern-30.html
随意加入努力并做出贡献。
我在模式中看到了一些与模式有关的问题 - 例如使用.data()。我看到的另一个问题是每次调用你的插件都会实例化该类。
总而言之,这是一个非常雄心勃勃的事情,并且比看起来更难,因为边缘用例很容易使你的插件崩溃并在没有解决的情况下刻录(正如我在之前尝试结合OOP时发现的那样)用jQuery)。
米兰