Javascript OOP最佳实践?

Oli*_*nde 13 javascript oop

我厌倦了在Javascript中看到几十种不同的面向对象编程方式.任何人都可以告诉我应该使用哪种技术考虑我想要在大型项目上工作,我希望我的代码能够成为未来的证据吗?

Ran*_*Dev 11

这些只是我提出的一些快速指南,如果其他人有任何有意义的添加,我已将此答案设置为社区维基,因此您应该很容易编辑.

  1. 命名空间您的对象,以确保它们永远不会与第三方JavaScript库冲突.
    window['Andrew']['JS'] = {
        addEvent: function(el,evName) {/*Stuff*/},
        Rectangle: function(width,height) {/*Stuff*/}
    };
    那么你可以使用以下方法创建一个矩形对象:
    var myRect = new Andrew.JS.Rectangle(14,11);
    然后你的代码将永远不会干扰或受到任何其他人的干扰Rectangle.

  2. 使用一致的命名策略,具体为:
    • 对象名称应大写,其他所有内容(变量,函数)应以小写字符开头,即
      var myRect = new Andrew.JS.Rectangle(14,11);
      document.write(myRect.getArea());
    • 确保一切都是有意义的,即方法的动词,参数的名词+形容词.

  3. 确保所有方法和参数都它们所属的对象相关.例如,在此示例中,可以使用该方法将矩形区域转换为平方英尺inSquareFeet().

    myRect.getAreaObject().inSquareFeet();
    确保inSquareFeet是返回的对象getAreaObject()的方法,而不是方法Andrew.JS.Rectangle

  4. 使用构造函数,或者更具体地说,尝试尽可能地确保对象在构造后不需要进一步初始化,因此代替:
    var Person = function()
    {
        this.name = "";
        this.sayHello = function ()
        {
            alert(this.name + " says 'Hello!'");
            return this;
        }
    }
    
    var bob = new Person();
    bob.name = "Bob Poulton";
    bob.sayHello();
    尝试:
    var Person = function(name)
    {
        this.name = name;
        this.sayHello = function ()
        {
            alert(this.name + " says 'Hello!'");
            return this;
        }
    }
    
    var bob = new Person("Bob Poulton");
    bob.sayHello();

  • sayHello会更好地分配给构造函数的原型,因此Person.prototype.sayHello = function(){...}这种方法对所有Person实例都是通用的.你现在这样做的方式效率不高,因为每个Person实例都会包含自己的sayHello副本. (2认同)

I.d*_*ies 7

我总是使用John resig:

http://ejohn.org/blog/simple-javascript-inheritance/

它很简单,不需要任何框架来运行.