Является ли использование Object.setPrototypeOf () при инициализации объекта влиять на производительность? [Дубликат]

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

7
задан Amit 7 September 2015 в 19:02
поделиться

2 ответа

Если вы боитесь (как видимо, вы должны ...) влияния производительности на использование Object.setPrototypeOf(), но хотите, чтобы синтаксис создания объекта был похож на то, как структурирован ваш код, попробуйте следующее:

var MyPrototype = {
    method1 : function(){...},
    method2 : function(){...},
    ...
};

var newObject = Object.assign(Object.create(MyPrototype), {
    property : 1,
    property2 : 'text'                 
});
5
ответ дан Amit 17 August 2018 в 15:51
поделиться
  • 1
    О, я вижу. hmm seams, как я пропустил это. Выглядит немного глупо, так как мы сначала создаем два новых объекта, один с желаемыми свойствами, но неправильный прототип и один без каких-либо свойств, но правильный прототип. Просто, чтобы потом обмануть все свойства от одного объекта к другому. Но так как это позволит избежать проблем с будущей производительностью, я думаю, что это хороший путь. Благодаря! – Jovan 7 September 2015 в 19:14
  • 2
    Вы создаете один объект с правильным прототипом, а другой - для копирования свойств. Только второй является «расточительным», но именно так вы обычно проходите несколько имен «именованных», значения в функцию. Object.create использует тот же механизм – Amit 7 September 2015 в 19:16
  • 3
    Да, я знаю это. Я имел в виду, что мы хотим создать один новый объект с определенным прототипом, но для этого нам действительно нужно создать два. Я также использую этот метод для аргументов метода, но здесь мы просто хотим быстро настроить новый объект с его правильным прототипом. Но это лучший способ пойти, поэтому никто не жалуется ^^ – Jovan 7 September 2015 в 19:21
  • 4
    Круто, рад помочь. – Amit 7 September 2015 в 19:22
  • 5
    Если вы используете Babel, вы также можете использовать свойство литерала объекта __proto__ и что-то вроде proto-to-create . – loganfsmyth 8 September 2015 в 04:15

Другой вариант - объединить литерал объекта с мелкой копией myPrototype, хотя это может быть не ваше желание.

var MyPrototype = {
    method1 : function(){},
    method2 : function(){}
};

var newObject = Object.assign({
    property : 1,
    property2 : 'text'                 
}, MyPrototype);
0
ответ дан JBallin 17 August 2018 в 15:51
поделиться
Другие вопросы по тегам:

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