John Resig的JavaScript类框架的改进

9

大家好,

最近我在寻找一个简单的JavaScript类框架,只做基础的继承。我在John Resig的博客上找到了他的例子框架,我认为它能够满足我的需求。然而,这篇文章是2008年发布的,我们毕竟谈论的是网络。

因此,我的问题是,您们会直接使用该系统吗?或者有什么改进的地方,在这些年里已经发现的东西?或者是类似于此框架的现有、活跃支持的框架?

谢谢。

3个回答

9

您可能希望从道格拉斯·克罗克福德(我强调)那里得到一些建议:

我已经写了8年的JavaScript,从来没有发现需要使用超级函数... 我现在认为在JavaScript中支持经典模型是一个错误

道格拉斯·克罗克福德,《JavaScript中的经典继承》,


1
我赞同这个观点。JavaScript 有其自己的习惯用法,"移植"经典继承实际上只是一个支撑。。。该语言具有自己的重用模式和设施,可以很好地工作。 (但是,如果我要采用经典继承模式,Resig 的方法仍然是一个不错的选择)。 - Charlie Flowers
嗯,我认为一个大问题是这些“自己的习惯用语”经常要么不太被理解,要么实现得很糟糕。提供一个熟悉的框架(例如经典的OO继承)可以使过渡更容易(参见Scala)。有拐杖总比爬行好。 - Daff
Daff - 但一旦意识到实现基于类的模式的错误,可能需要修复大量代码。学习Javascript继承并不难,只需要开放的思维。请注意,Resig的书计划在2008年秋季(9月?)出版,但仍未出版,其标题似乎更为谨慎:“JavaScript的秘密”。也许Resig也怀疑在javascript中使用基于类的继承的有用性。 - RobG
我不是很明白。你们是说应该使用原型继承?但是,如何引用父类?我认为 Crockford 在最后提到的“super”可能与此有关,但我现在感到困惑。 - Alex Turpin
27
如果你愿意,可以崇拜Douglas Crockford。我已经设计网络应用程序12年了,发现在JS中模拟经典继承非常简单,并且能够产生更清晰、可测试的代码。每个人都有自己的做法。 - Ruan Mendes
@JuanMendes——并非崇拜,只是引用了一个在控制ECMAScript更改方面具有重要经验的TC39委员会成员的话语,该成员对编程语言和开发有着丰富的经验,不仅限于Web。有趣的是,这句话已经更新到14年(也许这只是从文章撰写日期计算出来的值)。 - RobG

8

JavaScriptMVC的团队在基于John Resig框架示例的基础上,创建了一个类实现,做得非常出色:

Class provides simulated inheritance in JavaScript. Use clss to bridge the gap between jQuery's functional programming style and Object Oriented Programming. It is based off John Resig's Simple Class Inheritance library. Besides prototypal inheritance, it includes a few important features:

Static inheritance
Introspection
Namespaces
Setup and initialization methods
Easy callback function creation

这个框架的所有其他部分都是基于类的,但你也可以将其作为独立使用(压缩后不到6Kb)。我特别喜欢回调函数和静态继承。使用方法如下:

$.Class.extend('My.Class',
{
    // Static properties
},
{
    init : function(args)
    {
            // This is the constructor
    },

    classMethod : function()
    {
        alert("Class method called.");
    }
});

你能告诉我在哪里可以找到定义吗?听起来很有前途。 :) - Dave

2
你可以查看这个扩展版本的John Resig的Class模型:
https://github.com/riga/jclass
它仍然是基于原型构建,但也使用闭包提供私有成员。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接