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)
这可能吗?
构造函数是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)
对于你的第二个问题:没有什么可以阻止你比较构造函数(或任何函数):当两个函数相同时,它们是相等的。
| 归档时间: |
|
| 查看次数: |
9364 次 |
| 最近记录: |