Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.12.2014, 12:39
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

метаобъектный протокол
Звучит устрашающе-внушительно. Но прочитал вот такое определение,

Метаобъектный протокол — это механизм для определения и использования новых метаклассов.

Метаобъектный протокол определяет множество функций, которые содержат методы для классов. Программирование на уровне метаобъектного протокола — это определение новых классов вместе с методами для этих классов.

перестал боятся и наговнял вот такую реализацию на js

///////////////////////////////////////////////////////////////////////
//prepare:

Object.defineProperty(Object.prototype, "extend", {
 value: function(src){
   for(var i in src){this[i]=src[i]}
 },
 enumerable: false
})


Nigger=function(){} // левый класс
Nigger.prototype.color="black"

/////////////////////////////////////////////////////////////////////////
//implementation:

Class=function(classProperties, opt){
   var f=function(init){
      if(opt) if(opt.object) this.extend(opt.object)
      this.extend(init)
   }
   if(opt) if(opt.parent) {
                             f.prototype=Object.create(opt.parent.prototype)
                             f.prototype.constructor=f
                          }
   f.prototype.extend(classProperties)
   return f
}


//////////////////////////////////////////
//example

Person=new Class({legs: 2, hands: 2, head: 1}, {object: {a: 1}, parent: Nigger})


person1=new Person({name: "Jack"})
person2=new Person({name: "John"})

with(person1){console.log(color, hands, name)}
with(person2){console.log(color, hands, name)}

Person.prototype.footballFan=true // пусть экземпляры нашего класса person будут  футбольными болельщиками
Nigger.prototype.teeth="white" // пусть левый нигер теперь с белыми зубами

with(person1){console.log(color, hands, name, teeth, footballFan)}
with(person2){console.log(color, hands, name, teeth, footballFan)}


//  black 2 Jack
//  black 2 John
//  black 2 Jack white true
//  black 2 John white true


Мы создали конструктор классов, затем определили с помощью него класс. Опционально, в конструкторе можно указать родителя класса — суперкласс (в нашем случае — нигер — совершенно левый класс), а также слоты экземпляров создаваемого класса. Все классы расширяются динамически.

А между тем, если вбить в гугл запрос "метаобъектный протокол" (он же MOP) выскакивают результаты только для CL, причем, что сука характерно, лисперы для этого зах*рили жирную либу, поверх другой жирной либы -- CLOS, тогда как в JS все имплементится в несколько строк, можно сказать, есть нативная поддержка, LOL
Ответить с цитированием
  #2 (permalink)  
Старый 12.12.2014, 16:09
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

krutoy,
При попытке запустить выдает следующее:
Цитата:
error: Cannot redefine property: extend
Так таков и был план?

krutoy, не стоит менять базовые прототипы.

Последний раз редактировалось tsigel, 12.12.2014 в 16:13.
Ответить с цитированием
  #3 (permalink)  
Старый 12.12.2014, 16:13
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

tsigel,
Ты где запускаешь? в FF работает, на v8 в ноде тоже работало.
Ответить с цитированием
  #4 (permalink)  
Старый 12.12.2014, 16:15
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

krutoy,
на маке в хроме.
Ответить с цитированием
  #5 (permalink)  
Старый 12.12.2014, 16:15
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

tsigel,
Ты, видимо, запускаешь с какой то либой, где уже установлен extend. Убери либу или смени имя.
Ответить с цитированием
  #6 (permalink)  
Старый 12.12.2014, 16:16
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

krutoy,
нет никаких либ. Плагины в браузере тоже отключены
Ответить с цитированием
  #7 (permalink)  
Старый 12.12.2014, 16:17
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от tsigel
в хроме.
на венде в хроме работает
Ответить с цитированием
  #8 (permalink)  
Старый 12.12.2014, 16:18
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

krutoy,
На разных платформах даже одинаковые браузеры ведут себя по разному, я это давно замечал
Ответить с цитированием
  #9 (permalink)  
Старый 12.12.2014, 16:19
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

tsigel,
Значит выкинь свой мак на помойку. Это ж для голубых, как не стыдно Юзай openBSD
Ответить с цитированием
  #10 (permalink)  
Старый 12.12.2014, 16:20
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

krutoy,
Ну и пиши свои приложения только для Linux & Windows
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Протокол File krasovsky Javascript под браузер 5 23.02.2013 11:54
https протокол float Серверные языки и технологии 13 01.09.2011 18:02
Протокол http AndreyT Учебные материалы 3 10.07.2011 13:16
Протокол date: (передача переноса строки) BIOHAZARD Общие вопросы Javascript 2 01.10.2009 07:31
AJAX запрос на другой протокол Veresc AJAX и COMET 2 18.09.2009 18:47