Показать сообщение отдельно
  #13 (permalink)  
Старый 24.08.2018, 19:52
R2R R2R вне форума
Интересующийся
Отправить личное сообщение для R2R Посмотреть профиль Найти все сообщения от R2R
 
Регистрация: 22.08.2018
Сообщений: 13

SuperZen, все бы хорошо, только надо передавать объект, а не функцию)

Alexandroppolus, надо передавать в функцию объект, чтобы он записывался в конструктор.

Aetae, Ваша реализация очень хороша, я немного подкорректировал ее:
function CreateTest(name) {
    this.name = name;
    this.roll = () => ["simple", "hard"][Math.round(Math.random())];
}

function bindedAppend(parent, name, child) {
    Object.defineProperty(parent.prototype, name, {
        configurable: true,
        enumerable: true,
        get: function() {
            return this[name] = new Proxy(this, {
                get: (p, key) => key in child ? child[key] : this[key],
                set: (p, key, val) => this[key] = val
            })
        }
    });                  
};

bindedAppend(CreateTest, 'renameObj', {
    value : 7,
    rename: function() {
        return this.name = `${this.roll()} ${this.name}`;
    }
});

let test3 = new CreateTest("js test");

test3.renameObj.rename();

console.log(test3.name, test3.renameObj.value);

Придумаю потом, как объявить bindedAppend в конструкторе, будет совсем конфетка)
Ответить с цитированием