我需要将对类的构造函数的引用存储在变量中,然后再构造对象。这是我的最小代码示例:
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 */
我希望很清楚我想做什么。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 */
这可能吗?
构造函数是A
,因此您必须更改
var wrapper = new Wrapper( A.constructor );
到
var wrapper = new Wrapper( A );
您可以使用以下方法测试结果
console.log(obj instanceof A);
对于第二个问题:没有什么可以阻止您比较构造函数(或任何函数):两个函数相同时是相等的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句