Javascript:将构造函数作为变量中的引用传递并调用此构造函数
Javascript: Passing constructor as reference in a variable and calling this constructor
我需要将对类构造函数的引用存储在变量中,然后构造对象。这是我的最小代码示例:
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);
对于您的第二个问题:没有什么可以阻止您比较构造函数(或任何函数):当两个函数相同时,它们是相等的。
在JavaScript中,任何函数都可以是构造函数,但函数没有constructor
属性。
因此,应将A.constructor
更改为仅A
。
然而,函数确实有原型,并且它们的原型的constructor
属性引用回它们。因此,A.prototype.constructor
也会起作用,但引用A
的方式会更简单。
如果您的Wrapper
只封装了一个构造函数以便稍后返回,那么您似乎引入了一个不必要的对象。只需直接传递构造函数即可。
最后,您可以使用instanceof
运算符来了解对象是否是特定构造函数的实例。与将构造函数函数比较在一起相比,instanceof
的优势在于将考虑继承层次结构。
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- ES6构造函数返回基类的实例
- IIFE中的函数引用不可用
- 使用Google Visualization动态调用构造函数
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- 对使用函数构造函数创建的函数的内部引用
- 在挖空中引用对象构造函数外部视图模型的属性
- Javascript:将构造函数作为变量中的引用传递并调用此构造函数
- 在JavaScript中引用子构造函数中的父构造函数属性
- 构造函数中未定义对原型函数的javascript引用
- 使用原型从构造函数引用变量
- Javascript 构造函数,使用引用其他变量的外部变量进行闭包
- 构造函数函数.可以't覆盖对全局变量的引用
- 正在原型构造函数中创建对象引用
- Chrome如何管理对javascript构造函数的引用
- 作为对象属性调用函数时如何引用构造函数方法
- 对构造函数中当前对象的引用
- 从构造函数中引用Javascript实例变量而不使用'this'关键字
- 获取对包含构造函数属性的对象的引用
- 对构造函数的引用