Звучит устрашающе-внушительно. Но прочитал вот такое определение,
Метаобъектный протокол — это механизм для определения и использования новых метаклассов.
Метаобъектный протокол определяет множество функций, которые содержат методы для классов. Программирование на уровне метаобъектного протокола — это определение новых классов вместе с методами для этих классов.
перестал боятся и наговнял вот такую реализацию на 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