Показать сообщение отдельно
  #55 (permalink)  
Старый 20.09.2015, 10:23
Профессор
Отправить личное сообщение для ТОТ_САМЫЙ Посмотреть профиль Найти все сообщения от ТОТ_САМЫЙ
 
Регистрация: 10.09.2015
Сообщений: 184

Можно сахар написать (и можно его даже написать не засирая прототип, просто тогда надо будет писать set @, 'name' а не @set 'name')

Function.prototype.get = (name, getter)->
  Object.defineProperty @prototype, name,
    set: Object.getOwnPropertyDescriptor(@prototype, name)?.set
    get: getter
    configurable: yes
    enumerable: yes



Function.prototype.set = (name, setter)->
  Object.defineProperty @prototype, name,
    get: Object.getOwnPropertyDescriptor(@prototype, name)?.get
    set: setter
    configurable: yes
    enumerable: yes


class Cat
  @get 'name', -> alert 'GET NAME!!!'
  @set 'name', -> alert 'SET NAME!!!'


(new Cat).name
(new Cat).name = 22


compile to:
var Cat;

Function.prototype.get = function(name, getter) {
  var ref;
  return Object.defineProperty(this.prototype, name, {
    set: (ref = Object.getOwnPropertyDescriptor(this.prototype, name)) != null ? ref.set : void 0,
    get: getter,
    configurable: true,
    enumerable: true
  });
};

Function.prototype.set = function(name, setter) {
  var ref;
  return Object.defineProperty(this.prototype, name, {
    get: (ref = Object.getOwnPropertyDescriptor(this.prototype, name)) != null ? ref.get : void 0,
    set: setter,
    configurable: true,
    enumerable: true
  });
};

Cat = (function() {
  function Cat() {}

  Cat.get('name', function() {
    return alert('GET NAME!!!');
  });

  Cat.set('name', function() {
    return alert('SET NAME!!!');
  });

  return Cat;

})();

(new Cat).name;

(new Cat).name = 22;



Можно вот так писать для красоты и.т.п.
class Cat

	get Cat, 'name', ->
		alert 'GET NAME!!!'
		
	set Cat, 'name', ->
		alert 'SET NAME!!!'

Последний раз редактировалось ТОТ_САМЫЙ, 20.09.2015 в 10:25.
Ответить с цитированием