从javascript对象方法中的变量创建新对象
create new object from variable in javascript object method
我试图通过对象方法中的变量创建对象。像这样:
<>之前ObjectFactory = function(){}ObjectFactory.prototype.createObject = function(objectName){返回新的objectName;}var = 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
(通常最好避免使用),否则你需要一个对象来查找构造函数(例如,从字符串名称中获取构造函数)。
如果构造函数是全局函数,你可以在全局对象中查找它们,但是全局函数不是一个好主意。相反,给自己一个映射对象,并将构造函数设置为映射的属性:
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>
传递给ObjectFactory.prototype.createObject
的参数必须是function
类型,不能传递字符串或其他类型给这个函数。因为在那个函数中你调用了输入参数作为构造函数。可以使用以下代码:
ObjectFactory.prototype.createObject = function(objectName){
return new objectName;
}
/* This function is going to be a constructor function */
function MyObjectClassName {
this.properties = /* some value */;
this.methods = /* some functions */
}
var of = new ObjectFactory();
var MyObject = of.createObject(MyObjectClassName);
使用例子:
var array = of.createObject(Array);
array.push(1);
相关文章:
- 查找关键字并创建新对象
- 创建新对象时,为什么要更新旧对象
- 为什么要使用立即调用的函数来创建新对象
- 剑道网格-插入具有外部列的新对象失败
- 将原型调用为新对象中的另一个原型
- 将新对象添加到本地存储
- $$hashKey在Angular中push()新对象时未生成新值
- 从分析类传递现有对象,否则创建一个新对象
- 为什么这个功能打印“;未定义的未定义的“;作为联系人名称,添加“新对象”
- Will my'新对象'在套接字断开连接时被垃圾收集
- 从数组javascript创建新对象
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- 在for循环-Javascript中创建新对象
- Javascript:使用一个预先存在的对象值作为一个新对象的键
- 确定是创建新对象还是更新现有对象
- 返回它在Javascript中构建的新对象
- 如何使用Typescript创建一个包含对象的字段的新对象
- Sinon:存根和整个对象,并将其替换为新对象
- JavaScript:创建新对象类型的方法
- 将新对象“附加”到 ng 重复项