在玩了十几种不同的JavaScript库(例如Prototype,jQuery,YUI)之后,我发现每个不同的库都有不同的方式来模拟某种类层次结构并提供某种类继承支持.(除了jQuery)除了非常恼火,当你创建一个新类时,它必须依赖于库,除非你采用普通的方法.
我想知道哪个库提供了对类继承的最佳支持以及原因.
我希望有一天,JavaScript库作者可以就类创建和继承的一种风格达成一致.
我发现有一个以Ruby为模型的Javascript框架:
Js.Class
另一个好处是:
Joose-js(模仿驼鹿(perl))
我更喜欢Josse,因为它似乎更积极地开发,语法看起来也很整洁!
有什么想法吗???(也许这应该是另一个问题??)
我认为Microsoft Ajax完美地实现了它(使用名称空间,继承和接口等)
Type.registerNamespace("Demo"); Demo.Person = function(firstName, lastName, emailAddress) { this._firstName = firstName; this._lastName = lastName; this._emailAddress = emailAddress; } Demo.Person.prototype = { getFirstName: function() { return this._firstName; }, getLastName: function() { return this._lastName; }, getName: function() { return this._firstName + ' ' + this._lastName; }, dispose: function() { alert('bye ' + this.getName()); } } Demo.Person.registerClass('Demo.Person', null, Sys.IDisposable); // Notify ScriptManager that this is the end of the script. if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
你应该尝试优雅:
http://classy.pocoo.org/
它很简单,非常小,但在构建我的类时我拥有所需的一切.
看看Prototype.这是一个示例:
// properties are directly passed to `create` method var Person = Class.create({ initialize: function(name) { this.name = name; }, say: function(message) { return this.name + ': ' + message; } }); // when subclassing, specify the class you want to inherit from var Pirate = Class.create(Person, { // redefine the speak method say: function($super, message) { return $super(message) + ', yarr!'; } }); var john = new Pirate('Long John'); john.say('ahoy matey'); // -> "Long John: ahoy matey, yarr!"
Base2有简单的继承机制,请参阅John Resig的帖子(帖子中的评论也很有趣).
还要记住的是,尝试在Javascript中模拟经典OO最近已经得到了很多抨击(尽管在JS库革命的最初时期,它已经非常热情地进行了探索).