Javascript:将构造函数作为变量中的引用传递并调用此构造函数

use*_*527 3 javascript constructor factory function-pointers

我需要将对类构造函数的引用存储在变量中,并稍后构造该对象。这是我的最小代码示例:

function A() {
  var _foo = "A";
}

function Wrapper( constructorFunc  ) {
  var _constructorFunc = constructorFunc;

  this.constructorFunc = function() {
    return _constructorFunc;
  }
}

var wrapper = new Wrapper( A.constructor );
var cFunc = wrapper.constructorFunc();
var obj = new cFunc(); /* obj should be an A now */
Run Code Online (Sandbox Code Playgroud)

我希望我想做什么很清楚。Firebug 控制台给出错误TypeError: cFunc is not a constructor。正确的方法是什么?

此外,我必须能够“比较”构造函数,即我需要知道两个引用是否指向同一个构造函数。(在 C++ 中这是可能的,因为比较函数的地址。)举个例子:

function A() {
  var _foo = "A";
}

function B() {
  var _bar = "B";
}

function Wrapper( constructorFunc  ) {
  var _constructorFunc = constructorFunc;

  this.constructorFunc = function() {
    return _constructorFunc;
  }
}

var wrapper1 = new Wrapper( A.constructor );
var wrapper2 = new Wrapper( A.constructor );
var wrapper3 = new Wrapper( B.constructor );

wrapper1.constructorFunc() == wrapper2.constructorFunc() /* should evaluate to true */
wrapper1.constructorFunc() == wrapper3.constructorFunc() /* should evaluate to false */
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Den*_*ret 5

构造函数是A,所以你必须改变

var wrapper = new Wrapper( A.constructor );
Run Code Online (Sandbox Code Playgroud)

var wrapper = new Wrapper( A );
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令测试结果

console.log(obj instanceof A);
Run Code Online (Sandbox Code Playgroud)

对于你的第二个问题:没有什么可以阻止你比较构造函数(或任何函数):当两个函数相同时,它们是相等的。