gpt4 book ai didi

javascript - 在 JavaScript 对象方法中从变量创建新对象

转载 作者:行者123 更新时间:2023-12-02 17:03:37 25 4
gpt4 key购买 nike

我正在尝试通过对象方法内部的变量创建对象。像这样的事情:

    ObjectFactory = function(){    }    ObjectFactory.prototype.createObject = function(objectName){        return new objectName;    }    var of = new ObjectFactory();    var MyObject = of.createObject('MyObjectClassName');

知道如何做吗?

最佳答案

只需删除引号(并在var后添加一个空格):

var MyObject = of.createObject(MyObjectClassName);

(如果您确实想要使用字符串,请参见下文。)

完整示例:Live Copy

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
<style>
body {
font-family: sans-serif;
}
</style>
</head>
<body>
<script>
(function() {
"use strict";

var ObjectFactory = function(){

};

ObjectFactory.prototype.createObject = function(ctor){
return new ctor;
};

function Foo() {

}

var of = new ObjectFactory();
var f = of.createObject(Foo);
display("<code>f instanceof Foo</code>? " + (f instanceof Foo));

function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
</script>
</body>
</html>
<小时/>

如果您确实需要在那里使用字符串而不是函数引用,那么除非您想使用 eval(通常最好避免),否则您需要一个对象来查找构造函数函数(例如,从字符串名称获取构造函数)。

如果构造函数是全局,您可以在全局对象上查找它们,但全局是一个坏主意。相反,给自己一个 map 对象并将构造函数设置为 map 的属性:

var constructorMap = {
MyObjectClassName: MyObjectClassName
};

您甚至可以将其放在“ObjectFactory”上:

ObjectFactory.constructorMap = {
MyObjectClassName: MyObjectClassName
};

然后

ObjectFactory.prototype.createObject = function(objectName){
return new ObjectFactory.constructorMap[objectName];
};

完整示例:Live Copy

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
<style>
body {
font-family: sans-serif;
}
</style>
</head>
<body>
<script>
(function() {
"use strict";

function Foo() {

}

var ObjectFactory = function(){

};

ObjectFactory.constructorMap = {
Foo: Foo
};

ObjectFactory.prototype.createObject = function(objectName){
return new ObjectFactory.constructorMap[objectName];
};

var of = new ObjectFactory();
var f = of.createObject("Foo");
display("<code>f instanceof Foo</code>? " + (f instanceof Foo));

function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
</script>
</body>
</html>

关于javascript - 在 JavaScript 对象方法中从变量创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25471520/

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