ну, пожалуй, последний мой вариант
:
function isEmptyObj(obj) {
var a; for(a in obj) {return false;}
return true;
}
function F(x) {
if (this.constructor == F && isEmptyObj(this)) {
this.x = x;
}
return this.x;
}
var f = new F(3), obj = {x: 5};
alert(f.x); // 3
alert(F.call(obj)); // 5
alert(F.call(f)); // 3