在Javascript中使用或不使用原型的最佳实践

时间:2013-12-15 03:54:10

标签: javascript

我不认为开发人员喜欢在JS中使用原型,除非应用程序的规模很大。这是因为他们避免过度使用原型功能?

在逻辑下写任何更简单的方法?

function Dog (breed) {
  this.breed = breed;
};

Dog.prototype.bark = function() {
  console.log("Woof");
};

var buddy = new Dog("golden Retriever");
buddy.bark();

var snoopy = new Dog("Beagle");
snoopy.bark();

2 个答案:

答案 0 :(得分:1)

function Dog (breed) {//this stuff is private :)
  this.breed = breed;

    return { //public api
        bark: function(){
            console.log("Woof");
        }
    }
};

这种模式的优点是它提供了隐私。

答案 1 :(得分:1)

方法1

function Dog (breed) {
  this.breed = breed;
};

Dog.prototype.bark = function() {
  console.log("Woof");
};

<强>优点:

  1. 如果您创建了更多Dog的对象,则对象将更快地创建,因为bark已经在原型中定义,它也将在新对象中设置。
  2. <强>缺点:

    1. 无法保护数据成员。由于该函数与其他数据成员分开定义,因此不能处于封闭范围内。
    2. 方法2

      function Dog (breed) {
        this.breed = breed;
        this.bark = function() {
           console.log(this.breed);
        };
      };
      

      <强>缺点:

      1. 每次创建对象时,都必须创建该函数。所以,性能开销。
      2. 由于breed直接添加到对象本身,因此可以通过对象访问它。所以,没有数据保护。
      3. 方法3

        function Dog (breed) {
          this.bark = function() {
             console.log(breed);
          };
        };
        

        <强>优点

        1. 在闭包的帮助下,您可以访问对象中的breed,但无法在对象外部访问。所以,保护数据。
        2. 没有额外的变量:)
        3. <强>缺点:

          1. 每次创建对象时,都必须创建该函数。所以,性能开销。