•  

    原文地址:http://www.theregister.co.uk/2009/03/05/evans_data_gentlemen_prefer_php/print.html

    你打倒了PHP了吗?(还有Ruby)

    Evans Data展开的一项调查显示,总的来说,与使用Ruby、Perl, Javascript, Flex, 和 VB script编程的开发者相比,使用PHP的开发者更满意脚本语言。

    Evans Data说,他调查了世界范围内的500个开发者和IT专家,让他们排列出自己使用的脚本语言的特性和选择。根据12项特征来判断这些语言,诸如易用性、异常处理、安全、客户端脚本及代码社区。

    总的脚本王权倒向了PHP,PHP占据榜首。Ruby因其较高的易用性位居第二,也是赢得大部分开发者青睐的最重要的特点。在扩展性取得高分的Python排在第三位。

    调查报告:

    总体来讲,大部分语言具有优点和缺点。Ruby用户坚信它最容易使用,用Ruby开发要比其他语言快很多。它支持面向对象和代码可复用性,因此开发者应该能够写出可维护和可扩展的程序。然而,Ruby社区非常小,尽管过去两三年里不乏很多大肆宣传,Ruby市场渗透一直微弱,找到Ruby开发者也不太容易---这是一个潜在的大问题。

    Evans Data 认为Python用户“满腔激情”,他说,该语言最好的特点支持相对大型复杂应用程序的建立。虽然Python开发者社区不大,但是在过去的几年里显示出扩大的迹象。还有,Google使用Python,所以毫无疑问地,它非常酷。

    但是,Ruby和Python在总分上败给了PHP,PHP拥有仅次于JavaScript的第二大脚本语言社区。市场研究公司给PHP起了个绰号“web里事实上的做粗工者”,它具有强大的工具以及“成堆的、容易找到的”开发者。

    最低满意度的是那些使用Microsoft VBScript的用户。

    按类别划分的前三种语言是:

     

    • 易用性: Ruby, PHP, Flex 
    • 异常处理: Ruby, Python, Powershell 
    • 可扩展性: Python, PHP, Perl 
    • 可维护性、可读性: Ruby, PHP, Python 
    • 跨平台移植: PHP, Ruby, Python 
    • 社区: Ruby, PHP, Javascript 
    • 工具有效性: PHP, Ruby, VB Script 
    • 工具的质量: PHP, Flex, Python 
    • 性能: PHP, Perl, Python 
    • 内存管理: Python, Perl, Flex 
    • 客户端脚本: Javascript, Ruby, Windows Powershell 
    • 安全: Microsoft F#, PHP, Ruby 

     

     

  • Google公司上周发布了它的Google AJAX 类库API,使开发者借助公司整个基础设施去托管和应用大部分的Javascript类库。

    面向开发者程序的Google工程师 Dion Almaer说,“它真正减轻了开发人员的生活,提供了开发效率”。

    该API属于内容分布式网络、载入架构。通过Google AJAX API Loader方法,应用程序能够访问开源的JavaScript类库,包括script.aculo.us,dojo,jQuery,MooTools和prototype.

    Alamaer说项目只是刚刚开始;Google想增加更多的类库。

    “如果我们看到好的用法,浏览器会自动装载这些类库。这样,如果它们遇到了我们正使用的URL,它们能够自动从本地系统下载类库,甚至个别的【即时】类库。”Alamaer说。

    这样将根本没有网络命中。浏览器具有避免DNS命中、获取服务的IP地址。长时间的针对JavaScript的专门的浏览器缓存可以使用这些URL。

    “底线,我最兴奋的是,如果一切发生了,它意味着什么”,Almaer说。“我们就远离了一直以来不得不重新下载我们的标准类库的负担。”

    在该项目上的网页提到该API“解决了JavaScript中使用一堆类库开发mashups的痛苦。”

    除了托管类库,缓存头部也被设置了;还有及时的bug修复。自动压缩也是项目的部分功能。

    原文地址:http://www.computerworld.com/action/article.do?command=printArticleBasic&articleId=9091878

  • 以下三段代码,由繁到简:

     -------第一种-------

    function foo() {
     alert('hello');
    }
    foo();

     -------第二种-------

    var foo = function() {
     alert('hello');
    };
    foo();

     -------第三种-------

    (function(){
     alert('hello');
    })();

    请看prototype.js中的一段代码:

    (function() {
      var element = this.Element;
      this.Element = function(tagName, attributes) {
        attributes = attributes || { };
        tagName = tagName.toLowerCase();
        var cache = Element.cache;
        if (Prototype.Browser.IE && attributes.name) {
          tagName = '<' + tagName + ' name="' + attributes.name + '">';
          delete attributes.name;
          return Element.writeAttribute(document.createElement(tagName), attributes);
        }
        if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
        return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
      };
      Object.extend(this.Element, element || { });
    }).call(window);

  • 五年前,我写了《javascript的经典继承》。它介绍了Javascript是一种没有类(class-free)的、原型的语言,具有模仿一个经典系统的超强表达能力,它已经使自己突破了传统模型。

    由于JavaScript与其原型天性冲突,我的学习之旅一波三折。在一个基于原型的系统中,对象继承对象。然而,JavaScript缺乏表达这个操作的操作符。作为替代,它有一个new操作符,比如 new f()产生一个对象,继承于 f.prototype.

    这种间接关系似乎让传统的、有经验的程序员更熟悉,事实上并没有这样,正如我们看到的Java程序员对JavaScript的不好评论。JavaScript的构造函数形式并没有吸引大多数传统程序员。JavaScript的真正原型天性有点晦涩。结果,很少有知道如何有效使用它的程序员。

    幸运地是,一个实现真正基于原型的继承的操作符很容易产生。在我的工具包里,有一个标准的特性,我强烈推荐它都好几年啦。
    function object(o) {
      function F() {}
      F.prototype = o;
      return new F();
    }

    函数object获取了真正基于原型的继承,从而解开了JavaScript构造器模式。它用先前的对象作为参数,然后返回一个继承该对象的空的新对象。如果我们想从此新对象中获取一个成员,那么它的缺少键将由先前的对象提供。对象继承对象。面向对象还能做更多吗?

    你不需要产生类,而是造一些基于原型的对象,然后用这个object函数产生新实例。JavaScript的对象很容易改变,因此我们可以通过增加一些新字段和方法来扩大该新实例。它们随后就可以看做更新的对象的原型。我们不必用类产生很多相似的对象。

    方便起见,我们可以产生一些调用该object函数的函数,并提供其他个性化的东西,比如用特权函数扩展新对象。我有时调用这些maker函数。如果我们有一个maker函数,它调用另一个maker函数而非调用该object函数,那么我们会有一个寄生继承的模式。

    借助这些工具,还有JavaScript的lambdas和object quasi-literals,我写了大型、复杂、高效、结构良好的程序。目前传统的对象模型最受欢迎,但是我认为基于原型的对象模型功能更强、提供更好的表达能力。

    学习这些新模式也让我成为一名更好的传统程序员。动态世界的特点可以应用于静态世界。
    2006-06-07

    这儿是另一个表述:
    Object.prototype.begetObject = function () {
      function F() {}
      F.prototype = this;
      return new F();
    };
    newObject = oldObject.begetObject();
    2007-04-02

    object的问题在于它是全局的,这非常明显。Object.prototype.begetObject的问题在于它会绊住不合格的程序,当begetObject被覆写时,它会产生意想不到的错误。

    因此现在我喜欢这种写法:

    if(typeof Object.beget !== 'function') {
      Object.beget = function(o) {
        function F() {}
        F.prototype = o;
        return new F();
      }
    }
    newObject = Object.beget(oldObject);
    2008-04-07

    原文地址:http://javascript.crockford.com/prototypal.html