вот нашел у себя в хламе давно как то экспериментировал:
function setProto( object, proto ) {
if ( "__proto__" in Object.prototype ) {
return object.__proto__ = proto, object;
}
var protoFn = function() {},
hasDefine = false;
try {
Object.defineProperty({}, 'test', {value:null});
hasDefine = true;
} catch( _e_ ) {}
protoFn.prototype = proto;
proto = new protoFn();
for( var key in object ) {
if ( object.hasOwnProperty( key ) ) {
if ( hasDefine ) {
Object.defineProperty( proto, key, Object.getOwnPropertyDescriptor( object, key ) );
} else {
proto[ key ] = object[ key ];
}
}
}
return proto;
}
var a = {
get name() {
return "Hello";
},
testA: function() {}
}
var b = {
get name() {
return Object.getPrototypeOf( this ).name + " world";
},
testB: "str",
he: undefined
}
var c = {
name: function() {
return Object.getPrototypeOf( this ).name + " world test";
}
}
b = setProto( b, a )
c = setProto( c, b );
alert( c.name() );