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
Попробуйте так:

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

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

Войти через центр авторизации
Похожие вопросы
23 марта 2019, в 23:45
5000 руб./за проект
23 марта 2019, в 23:33
800 руб./за проект
23 марта 2019, в 21:08
1500 руб./за проект