Puis-je construire un objet JavaScript sans utiliser le mot clé new?

Voici ce que j'aimerais faire:

function a() {
  //...
}
function b() {
  // Some magic, return a new object.
}
var c = b();

c instanceof b //-> true
c instanceof a //-> true
b instanceof a //-> true

Est-il possible? Je peux faire b être une instance de a facilement en connectant a dans sa chaîne de prototype, mais puis-je faire new b(), qui est ce que j'essaie d'éviter. Est ce que je veux possible?

Mise à jour: je pense qu'il pourrait être possible avec l'utilisation judicieuse de b.__proto__ = a.prototype. Je vais faire des essais plus après le travail.

Mise à jour 2: ci-Dessous est ce qui semble être le plus proche que vous pouvez obtenir, ce qui est assez bon pour moi. Merci à tous pour les réponses intéressantes.

function a() {
  //...
}
function b() {
  if (!(this instanceof arguments.callee)) {
    return new arguments.callee();
  }
}
b.__proto__ = a.prototype

var c = b();
c instanceof b //-> true
c instanceof a //-> false
b instanceof a //-> true

Mise à jour 3: j'ai trouvé exactement ce que je voulais dans une blog sur la " puissance des constructeurs, une fois, j'ai ajouté l'essentiel b.__proto__ = a.prototype ligne:

var object = (function() {
     function F() {}
     return function(o) {
         F.prototype = o;
         return new F();
     };
})();

function a(proto) {
  var p = object(proto || a.prototype);
  return p;
}

function b(proto) {
  var g = object(a(proto || b.prototype));
  return g;
}
b.prototype = object(a.prototype);
b.__proto__ = a.prototype;

var c = b();
c instanceof b //-> true
c instanceof a //-> true
b instanceof a //-> true
a() instanceof a //-> true
Je suis curieux: pourquoi voulez-vous éviter de nouvelles?
Je suis entrain de créer un Javascript version de Scala le cas de classes: github.com/pr1001/caseclass.js
Ne voyant pas pourquoi, qui vous oblige à travailler autour de la new mot-clé. Et __proto__ ne va pas vous aider à croix-navigateur.
C'est tout ce sucre syntaxique, rien de plus. Cependant, je pense que c'est un défi intéressant tout de même.
Double Possible de JavaScript: Comment faire pour créer une nouvelle instance d'une classe sans utiliser le mot clé new?

OriginalL'auteur pr1001 | 2009-12-11