在 Javascript 中设置没有 __proto__ 的函数原型

Setting the prototype of a function without __proto__ in Javascript

我想创建一个以对象为原型的构造函数。

例如:

var constructor=function(){
  this.foo=bar;
}

var constructorProto={
  method:function(){}
}

constructor.__proto__=constructorProto;

constructor.method();
new constructor;

功能演示:http://jsfiddle.net/juwt5o97/

这允许我在调用 new 之前传递构造函数并修改它。但是,我不想使用 __proto__Object.setPrototypeOf()。有 "proper" 的方法吗?

如果您想扩展第一个 class 的原型(以便实例继承这些方法),您可以使用 Object.create:

var ClassA=function(){
  this.foo='bar';
}

var protoObject = {
  method:function(){alert('t');}
}

ClassA.prototype = Object.create(protoObject);

new ClassA().method();

如果你只想将静态函数附加到第一个函数,那么你可以这样做:

for (var property in protoObject) {
  if (typeof protoObject[property] == 'function') {
    ClassA[property] = protoObject[property];
  }
}

ClassA.method();