На самом деле оказывается, что это возможно , хотя и нестандартным способом .
Mozilla, Webkit, Blink / V8, Rhino и ActionScript предоставляют нестандартное свойство __proto__
, которое позволяет изменять прототип объекта после его создания. На этих платформах возможен следующий код:
function a () {
return "foo";
}
a.b = function () {
return "bar";
}
function c () {
return "hatstand";
}
c.__proto__ = a;
c(); // returns "hatstand"
c.b(); // returns "bar"; inherited from a
Это может быть полезно всем, кому не нужно беспокоиться о кроссплатформенной совместимости.
Однако обратите внимание, что только свойства объекта могут быть унаследованы. Например:
var d = {};
d.__proto__ = a;
d.b(); // returns "bar"
d(); // throws exception -- the fact that d is inheriting from a function
// doesn't make d itself a function.