MDN имеет огромное страшное предупреждение о модификации прототипа в вашем коде:
Изменение [[Prototype]] объекта по характеру современные JavaScript-движки оптимизируют доступ к ресурсам, очень медленно в каждом браузере и движке JavaScript. Влияние на исполнение измененного наследования является тонким и отдаленным, и не ограничиваясь просто временем, проведенным в obj. proto =... statement, но может распространяться на любой код, который имеет доступ к любому объекту, [[Прототип]] изменен. Если вы заботитесь о производительности, следует избегать установки [[Prototype]] объекта. Вместо этого создайте новый объект с желаемым [[Prototype]] с использованием Object.create().
Мне интересно, есть ли ситуации, в которых вы можете изменить прототип объекта, не вызывая каскадных эффектов оптимизации, которые убивают вашу производительность программы. Похоже, должно быть. Например, если вы только модифицируете прототип сразу после создания объекта (и до его использования каким-либо другим). Но я думаю, что это очень зависит от двигателя.
Знает ли кто-нибудь, есть ли эффективные способы изменения прототипа объекта?
Изменить: мотивация для этого вопроса исходит из желания создать объекты, которые наследуют от Function
. И единственный способ, которым я знаю, как это сделать, - изменить прототип функции. Посмотрите на самую нижнюю часть ответа Raynos: класс javascript наследуется от класса Function