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

Setting the prototype of a function without __proto__ in Javascript

本文关键字:proto 函数 原型 Javascript 设置      更新时间:2023-09-26

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

例如:

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()。有没有一种"合适"的方法来做到这一点?

如果您想扩展第一个类的原型(以便实例继承方法),可以使用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();