php 动态函数名称,php – 来自动态函数名称的Javascript新对象实例

在PHP中,字符串可用于动态选择用于实例化的类.以下是PHP中的两个简单类:

PHP

class Magic implements Genius {

public function perform() {

echo 'madya look :P' . PHP_EOL;

}

}

class Genie implements Genius {

public function perform() {

echo 'your wish has been granted!' . PHP_EOL;

}

}

现在可能存在一个变量,使得在运行时实例化的类基于其内容

$sGeniusClass = 'Magic';

$oGenius = new $sGeniusClass();

现在在Javascript中我喜欢使用函数作为构造函数来获得某种级别的类型,在这种情况下我可能会:

function Magic() {}

Magic.prototype = {

perform : function()

{

console.log('madya look :P');

}

}

function Genie() {}

Genie.prototype = {

perform : function()

{

console.log('your wish has been granted!');

}

}

我知道我可以使用eval来实现与PHP类似的东西:

方法#1

var sClassName = 'Genie';

eval('var oGenius = new ' + sClassName);

方法#2

var sClassName = 'Genie';

var oGenius = new Function('return new ' + sClassName)();

On the MDN虽然听起来每次创建实例时都会因重新评估而影响性能:

Function objects created with the Function constructor are parsed when

the function is created. This is less efficient than declaring a

function and calling it within your code,because functions declared

with the function statement are parsed with the rest of the code.

现在我还有一种方法有点单调乏味:

方法#3

var aClassMap = {

Magic : Magic,Genie : Genie,create : function(sClassName) {

if(this[sClassName] === undefined)

return false;

return new this[sClassName];

}

}

var sClassName = 'Genie';

var oGenius = aClassMap.create(sClassName);

这似乎是我最喜欢的整体,没有使用eval,也没有后续的重新评估,比如解决方案#2.虽然这仍然有点工作,所以我的问题是双重的:

>除了我展示的3种方法之外,还有其他方法吗?

>是否有类似于PHP的字符串可以映射到要实例化的函数?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值