JavaScript最佳实践原型

时间:2017-05-24 16:29:30

标签: javascript object prototype

我在构造函数的原型中有一个函数:

function Animal(name) {
  this.name = name
}

Animal.prototype.generateToys = function(numberOfToys) {
  if(numberOfToys == 1) {
    this.createToys();
  } 
  else {
    this.createToys();
  }
}

仍然需要声明createToys。这就是我的问题指向的地方。假设generateToys是唯一可以调用createToys()的方法,最好在方法createToys中创建generateToys,如下所示:

function Animal(name) {
  this.name = name
}

Animal.prototype.generateToys = function(numberOfToys) {
  if(numberOfToys == 1) {
    this.createToys();
  } 
  else {
    this.createToys();
  }

  function createToys() {
    ...
    ...
    ...
  }
}

或者您会将其创建为方法(原型),如下所示:

Animal.prototype.createToys = function() {
  ...
  ...
  ...
}

什么会更好,为什么? :)

3 个答案:

答案 0 :(得分:1)

如果将其放在generateToys()方法中,则每次调用该方法时都会重新声明它,然后在方法完成时从范围中删除。大多数情况下,这不是您想要的,所以您更愿意将其创建为单独的方法。

答案 1 :(得分:1)

这取决于您的架构。

如果你计划有很多Animal的实例,那么将你的方法添加到原型是更好的,否则你将创建许多私有函数,这是昂贵的(在性能方面)。

答案 2 :(得分:1)

声明原型中的函数限制了该范围之外的可见性,并导致每次调用Animal.prototype.generateToys()时都声明函数(浪费内存)

Animal.prototype.generateToys = function(numberOfToys) {
   var createToys = function createToys() { 

   }

})

在原型上声明它意味着你的每个实例都可以直接调用它,你在内存中只有一个声明,因为原型本身就是你所有实例共享的一个引用。