Объектно-ориентированное программирование с использованием Javascript - Конструкторы - PullRequest
2 голосов
/ 12 мая 2009

Я много такого видел ...

function myObject(data) {
       var myData = data;
}

myObject.prototype.doSomething = function () {
      alert("I did something!");
}

но intellisense в Visual Studio дает мне конструктор .confunction для функций, который заставляет меня поверить, что это будет правильно ...

function myObject() {
     var myData;

     this.constructor = function(data) {
         myData = data;
     }

     this.doSomething = function() {
         alert("I did something!");
     }
}

Мне нравится инкапсуляция второго метода, но почти все используют ".prototype". Есть ли какая-то причина, чтобы сделать это, в частности, или это нормально, чтобы инкапсулировать все методы классов, как это.

Ответы [ 2 ]

3 голосов
/ 12 мая 2009

Это совсем не то, что делает constructor. Он просто возвращает функцию. Так что в вашем случае он вернул бы myObject. Например:

function someObject() {
  this.a = 5;
}
var obj = new someObject();
obj.constructor; // Would return someObject

См. this для более подробной информации о свойстве constructor.

Смысл использования prototype в том, что вы можете расширять конструкторы после их создания. Так что вы можете использовать его, например, для добавления метода ко всем объектам String.

String.prototype.myFunc = function(){/*Some code*/};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...