Как создать объект JavaScript с определенными переменными и функциями? - PullRequest
0 голосов
/ 09 октября 2010

Допустим, я хочу создать объект с именем «Вершина». Обычно в Java я делаю это следующим образом:

public class Vertex {

   // member variables
   public data;
   private id;

   // member methods
   public Vertex() { /* default constructor */ }
   public getID() { return id; }
}

Теперь, как бы я это сделал в JavaScript? Я хочу сохранить частное против публичного? Это то, что я настроил до сих пор, но я не думаю, что это правильно, и я никогда не имел дело с ООП в JavaScript.

/**
 * Vertex constructor.
 */
function Vertex(object) {

    data = object;
    id = object.getCode(); // each Vertex will have a unique id which will be the city code
};
Vertex.prototype = (function() {
  // Private Members here

  // Public Members inside return
  return {
    constructor : Vertex,

    getID : function() {

        return (id);
    }
};

Я совсем не знаком с прототипами, но я пытаюсь учиться. Это правильный способ сделать это? Если это не так, я в основном пытаюсь выполнить то, что делает вышеупомянутый код Java, но делаю это в JavaScript.

Ответы [ 3 ]

4 голосов
/ 09 октября 2010

http://robertnyman.com/2008/10/14/javascript-how-to-get-private-privileged-public-and-static-members-properties-and-methods/ объясняет это в мучительных деталях.В твоем случае ...

// Constructor
function Vertex (data) {
    // Private
    var id = 1;

    // Privileged
    this.getID= function () {
        return id;
    };

    // Public
    this.data = data;
}

// Public
Vertex.prototype.getData = function () {
    return this.data;
};

// Static property
Vertex.static = "something";
2 голосов
/ 09 октября 2010

Существует много способов сделать систему классов / экземпляров похожей на ту, которую вы используете в других языках, из любопытной реализации прототипов JavaScript.Нет единого общепринятого способа, которым все пользуются, и множества возможных компромиссов для удобства и производительности.См. этот вопрос для обсуждения различных общих моделей классов / экземпляров.

Пока вы можете воспроизводить (в основном-) частные переменные с помощью замыкания, я бы настоятельносоветую против этого.Вы можете извлечь небольшую выгоду, перенеся модель привилегий Java в JavaScript.

Java требует применения закрытых членов в качестве части своей модели безопасности.Но в JavaScript нет модели для границ безопасности на странице, поэтому вы не защищаете свой код от неправомерного использования кем-либо, кроме себя.Все, что вам действительно нужно, это сделать быструю отладку и создание прототипов немного сложнее.

Попробуйте вместо этого использовать модель системы чести (как, например, в Python).Префикс «псевдо-приватные» члены с подчеркиванием указывает на то, что к этим членам нельзя обращаться извне.

0 голосов
/ 09 октября 2010

Вы можете использовать JSDoc для добавления метаинформации (например, частного членства) к вашим переменным и функциям. Такие инструменты, как компилятор Google closure , могут использовать эту мета-информацию для проверки вашего кода на предмет несанкционированного доступа к этим членам. (и многое другое)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...