Javascript.RU

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

var CreateTest = function CreateTest(name) {
  this.name = name
  this.roll = () => ['simple', 'hard'][Math.round(Math.random())]
}

CreateTest.prototype.renameObj = function () {
  return {
    rename: () => {
      return this.name = `${this.roll()} ${this.name}`
    }
  }
}

var test = new CreateTest('js test')
console.log(test.renameObj().rename())


мои 5 копеек %)
Ответить с цитированием
  #12 (permalink)  
Старый 24.08.2018, 13:33
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от R2R Посмотреть сообщение
Т.е. пользователь может написать простую функцию, меняющую координаты элемента по некой формуле, поместив ее со своими параметрами в объект, затем вызвать ее через функцию обертку с промисом и raf. При этом он абстрагируется от асинхронной логики и думает только над уравнением перемещения. Чтобы это осуществить, как раз и требуется добавить объект в конструктор (тоже через обертку, чтобы это мог делать пользователь-новичок, не знакомый с ООП в js).
надо передавать в параметры некоторую пользовательскую функцию, которую твой класс будет сам вызывать?

примерно так
function CreateTest(params) {
  this.name = params.name;
  this._calcFunc = params.calcFunc;
}

CreateTest.prototype = {
  constructor: CreateTest,

  move: function() {
    var calcResult = this._calcFunc();
    // ...
  }
};


var test = new CreateTest({
  name: '...',
  calcFunc: function() { return 2 + 2; }
});

test.move();
Ответить с цитированием
  #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 в конструкторе, будет совсем конфетка)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление объекта, при создании, в массив Egor_735_jr Общие вопросы Javascript 5 15.08.2018 13:08
Добавление объекта в массив в цикле Dark19 Элементы интерфейса 3 11.12.2016 23:11
Динамическое добавление объекта во время анимации three.js Ni55aN Общие вопросы Javascript 0 11.11.2014 22:24
Добавление объекта в объект Sweet Общие вопросы Javascript 4 07.07.2010 17:51
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00