НектаринСемья, любовь-морковь и т.п.

Супер. Исходники Сафари

Смотрю исходники Сафари, в том месте, где ядро javascript. Просто восторг.

Хочу понять изнутри, как всё это работает, все эти прототипы, наследование и т.п.

Я всегда лучше понимал, как всё работает, разобрав до винтика, увидев всё изнутри.

Вот это реализация функции IsPrototypeOf для объекта, сначала на js, потом на C:

// ECMA-262 - 15.2.4.6
function ObjectIsPrototypeOf(V) {
if (!IS_OBJECT(V) && !IS_FUNCTION(V)) return false;
return %IsInPrototypeChain(this, V);
}


static Object* Runtime_IsInPrototypeChain(Arguments args) {
NoHandleAllocation ha;
ASSERT(args.length() == 2);
// See ECMA-262, section 15.3.5.3, page 88 (steps 5 - 8).
Object* O = args[0];
Object* V = args[1];
while (true) {
Object* prototype = V->GetPrototype();
if (prototype->IsNull()) return Heap::false_value();
if (O == prototype) return Heap::true_value();
V = prototype;
}
}


Классно то, что описывают в коментариях все пункты стандарта... в общем, нужно на досуге почитать всё это дело...