Объектно-ориентированные вопросы в JavaScript

Получив это исключение, я углубился в исходный код JRE. Стало очевидно, что сообщение довольно вводит в заблуждение. Он мог означать, что он говорит, но в более общем смысле это означает, что сервер не имеет данных, которые ему нужно для ответа на запрос запрошенным способом. Это может произойти, например, если сертификаты отсутствуют в хранилище ключей или не были сгенерированы с соответствующим алгоритмом. Действительно, учитывая набор шифров, которые установлены по умолчанию, нужно было бы пойти на несколько длин, чтобы действительно получить это исключение из-за отсутствия общих наборов шифров. В моем конкретном случае я создал сертификаты с алгоритмом DSA по умолчанию, когда мне нужно было заставить сервер работать с Firefox, был RSA.

39
задан BrianH 15 January 2009 в 06:12
поделиться

7 ответов

Каждый раз, когда функция () {} оценена, она создает новый функциональный объект. Поэтому в № 1 все Пользовательские объекты совместно используют тот же getName и функции getAge, но в № 2 и № 3, каждый объект имеет свою собственную копию getName и getAge. Все различные функции getName, все ведут себя точно то же, таким образом, Вы не видите различия в выводе.

{...} Стенография конструктор. При оценке это создает новый "Объект" с данными свойствами. При выполнении "нового Пользователя (...)", это создает нового "Пользователя". Вы, оказывается, создали Объект с тем же поведением как Пользователь, но они имеют различные типы.

Ответ на комментарий:

Вы не можете, непосредственно. Вы могли сделать функцию, которая создает новый объект согласно № 3. Например:

function make_user(name, age) {
    return {
        name: name,
        age: age,
        getName: function() { return name; },
        getAge: function() { return age; },
    };
}

var user = make_user("Joe", "18");
22
ответ дан 27 November 2019 в 02:50
поделиться

Если бы Вы хотите сделать ООП в JavaScript, я высоко предложил бы искать закрытия. Я начал свое приобретение знаний на предмете с этими тремя веб-страницами:

http://www.dustindiaz.com/javascript-private-public-privileged/

http://www.dustindiaz.com/namespace-your-javascript/

http://blog.morrisjohns.com/javascript_closures_for_dummies

, который различия между 1, 2, и 3 следующим образом: 1) Пример добавления новых методов к существующему объекту. 2) Совпадает с № 1 кроме некоторых методов, включены в объект в Функции пользователя. 3) Пример определения объекта с помощью JSON. Недостаток - то, что Вы не можете использовать новый (по крайней мере, не с тем примером) для определения новых экземпляров того объекта. Однако Вы действительно извлекаете пользу из удобного стиля кодирования JSON.

необходимо определенно читать на JSON, если Вы еще не знаете это. JavaScript будет иметь намного больше смысла, когда Вы поймете JSON.

редактирование , Если Вы хотите использовать новый в функциональном № 3, можно записать это как [1 113]

function User() {
  return {
    name: "",
    age: 0,
    setName: function(name) {
      this.name = name;
    },
    setAge: function(age) {
      this.age = age;
    },
    getName: function() {
      return this.name;
    },
    getAge: function() {
      return this.age;
    }
  };
}

, Конечно, все те функции и свойства затем были бы общедоступны. Для создания их частными, необходимо использовать закрытия. Например, Вы могли сделать возраст и имя частными с этим синтаксисом.

function User() {
  var age=0;
  var name="";
  return {
    setName: function(name_) {
      name = name_;
    },
    setAge: function(age_) {
      age = age_;
    },
    getName: function() {
      return name;
    },
    getAge: function() {
      return age;
    }
  };
}
12
ответ дан 27 November 2019 в 02:50
поделиться

2:

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

Это

User.name = "BoB";
User.age = 44;

произведет тот же вывод как Ваш пример.

нет никаких конструкторов, поскольку они появляются на других языках. Самый легкий путь состоял бы в том, чтобы просто определить init () функция и назвать его прямо после инстанцирования объекта.

, Но моя самая большая подсказка для Вас должен изучить http://www.prototypejs.org/ . Это - библиотека JavaScript с большим количеством замечательных функций, которое пытается сделать JavaScript "большим количеством OO*".

пользующаяся опытная библиотека можно сделать классы для поведения больше как реальные классы ООП. Это также конструкторы функций.

Редактирование: Что касается того, что Вы спросили в своем комментарии:

person = new User();
person.name = "Bob";
person.age = 44;
5
ответ дан 27 November 2019 в 02:50
поделиться

Вопрос № 1

prototype обладает преимуществом обезьяна, исправляющая . Поскольку первый пример показывает, функция добавляются после совершения. Можно продолжить это, чтобы добавить или заменить любые методы, в которых Вы нуждаетесь (хотя со справедливым предупреждением).

объекты Определения как № 2 больше вроде классического ООП. Но с другой стороны исправление обезьяны не позволяется на всех языках ООП.

Вопрос № 2

В Вашей 3-й функции, Вам даже не нужно get и set, функции - name и age являются общественными собственностями (потенциальная оборотная сторона к {}).

var User = {
  name: "",
  age: 0
};

User.name = 'Bob';
User.age = 44;

console.log("User: " + User.name + ", Age: " + User.age);

то, Когда Вы создаете объект с помощью {} (литерал объектов), {}, является конструктором (варьирующийся на браузере). Но по существу нет Вы не можете использовать конструктора в этом формате.

1
ответ дан 27 November 2019 в 02:50
поделиться

Ваш пример № 1 показывает использование опытного свойства. Это свойство доступно всем объектам JavaScript, которые что Вы создаете, и позволяет Вам добавлять свойства или функции к объектному объявлению, таким образом, у Вас был объект с 2 свойствами, и позже Вы добавили 4 функции (методы считывания и методы set).

необходимо рассматривать опытное свойство как способ изменить объектную спецификацию во времени выполнения, сказать, что у Вас есть объект, названный именем:

var Name = {
  First: "",
  Last: ""
};

можно использовать прототип для добавления функции getFullName () позже просто:

Name.prototype.getFullName = function() { return this.First + " " + this.Last; }

В примере 2 Вы встраиваете объявление этих методов считывания и методов set в объектном объявлении так в конце, они - то же. Наконец на 3-м примере Вы используете объектную нотацию JavaScript, которую необходимо видеть JSON.

О Вашем вопросе 2 можно просто объявить объект как:

var User = {
  name: "",
  age: 0
};

это даст Вам тот же объект без методов считывания и методов set.

4
ответ дан 27 November 2019 в 02:50
поделиться

У Вас, кажется, есть некоторые хорошие ответы здесь, но Вы хотели бы смотреть на этот вопрос: best-approach-to-member-variables-in-object-oriented-javascript. Это было мой ответ , который описывает различия и similaries.

0
ответ дан 27 November 2019 в 02:50
поделиться

Если вас интересуют разговоры об объявлении класса JavaScript в стиле JSON ...

http://mahtonu.wordpress.com/2010/04/13/json-style-javascript-object- декларация /

0
ответ дан 27 November 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: