Prototype - это зарезервированное ключевое слово, и вы должны быть очень осторожны при его использовании.
Статьи по ключевому слову прототипа
У вас есть несколько проблем в вашем коде.
Тогда внутри вашего createSubPrototype:
return new subTypePrototype();
Вы создаете функцию, а затем возвращаете результат выполненной функции, где вы должны вернуть указатель на вашу функцию, например
return subTypePrototype;
Но вы не должны создавать функцию, потому что кажется, что вы хотите получить родительский «прототип»:)
Таким образом, ваш код должен выглядеть примерно так:
function createPrototype(subType, superType)
{
subTypePrototype = superType.prototype;
subTypePrototype.constructor = subType; //- beware this is wrong !!!
subTypePrototype.str = "say";
return subTypePrototype;
}
Проверьте строку, которую я пометил как неправильную, тем самым вы обновляете как вспомогательный, так и родительский тип
Как это сделать:
При этом, если вы хотите расширить объект, я бы посоветовал вам использовать существующие библиотеки. (jQuery, Mootools и т. д.). Вот пример того, как это сделать правильно