Обновить
Если это невозможно, пожалуйста, не стесняйтесь предоставить ответ, объясняющий, почему. Я был бы рад отметить, что он принят.
Я хотел бы немного упростить следующий код (два шага для объявления объекта, я бы хотел иметь один):
var Masher = function(opts) {
this._name = opts.name;
};
Masher.prototype = Object.create(Object.prototype, {
_name: { writable: true },
name: { get: function() { return this._name; }}
});
// Note: (new Masher({name: 'bar'})).name == 'bar'
Я хотел бы создать весь прототип функции за один раз с функцией конструктора, появляющейся где-то в Object.create. Возможно, что-то вроде этого:
var Basher = Object.create(Function.prototype, {
_name: { writable: true },
name: { get: function() { return this._name; }},
constructor: { value: function(opts) { this._name = opts.name; }}
});
Однако, когда я вызываю new Basher()
, я получаю: «Ошибка типа: объект не является функцией».
Хотя я понимаю, что могу сделать это с помощью синтаксического сахара (вспомогательной библиотеки), моя цель здесь состоит в том, чтобы сделать все как можно проще и получить некоторое представление о JS-объекте, прототипе, внутренностях конструктора. Я попытался прочитать как можно больше об этом: вопросы, связанные с SO , Крокфорд, Бен Надель, Йост Дипенмаат.
Возможно я не нашел правильную формулировку, или я борюсь с философией дизайна Object.create, или язык этого не позволяет. Возможно, это действительно просто стилистическая вещь, а значит, и самомнение.
Конечно, я могу жить с двухэтапным процессом (Masher). Есть что-то правильное в том, чтобы упаковать все это в один кадр (Башер).
Есть ли способ сделать это? Спасибо.