gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:10:58 24 4
gpt4 key购买 nike

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

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:将构造函数作为变量中的引用传递并调用此构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26699248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com