DarthWazer
@DarthWazer

Можно ли прикрутить свойство, методу объекта в литералах или при использовании дескриптора?

Привет котаны.
Я хочу добавить свойство к функции-методу объекта, например типа такого: func.prop = value.
Но как это сделать прямо в литерале или при создании через Object.defineProperties ?
// Пример
Object.defineProperties(this, {
......
        "disable": {
            writable: true,
            enumerable: true,
            value: function () { this._enabled = false; }
        } // Вот как в такой конструкции добавить? 
.....
}

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

P.S. Делать что то типа "object[propname].prop = value", не предлагайте пожалуйста, это я и так знаю.
  • Вопрос задан
  • 153 просмотра
Решения вопроса 2
DarthWazer
@DarthWazer Автор вопроса
Итак, решение найдено, идею подсказал Alex Netkachov, большое ему спасибо!
Object.defineProperties(this, {
....
"Method": {
            writable: true,
            enumerable: true,
            value: Object.assign(function () {
                console.log("Привет! На тостере есть не только лохи!")
            }, { "say": "Нello from Method!" }) 
        }
....
}


UPD: Придумал еще более удобное решение - через расширение стандартного конструктора:
Object.defineProperty(Function.prototype, "desc", {
        enumerable: false,
        configurable: false,
        value: function (docstr) {
            if (docstr) {
                Object.defineProperty(this, '_doc_', {
                    value: docstr,
                    enumerable: true,
                    configurable: true
                });
            }
            return this;
        }
    });

Теперь при function expression можно легко и просто создать свойство _doc_ c описанием!
{
   prop: function () {
    // code
  }.desc("JavaScript is power!")
}
Ответ написан
Alex_At_Net
@Alex_At_Net
Чат о разработке ПО - https://t.me/at_net
Попробуйте так:

let obj = {
  method1 : Object.assign(function () {
    console.log('method1');
  }, { description : 'my method' })
};
console.log(obj.method1.description);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
CS Money Санкт-Петербург
от 120 000 до 150 000 руб.
Digital Sharks Казань
от 60 000 до 65 000 руб.
Alternativa Games Пермь
от 40 000 до 80 000 руб.
20 янв. 2019, в 13:50
15000 руб./за проект
20 янв. 2019, в 09:57
10000 руб./за проект
20 янв. 2019, в 07:18
15000 руб./за проект