大佬教程收集整理的这篇文章主要介绍了php – 来自动态函数名称的Javascript新对象实例,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在PHP中,字符串可用于动态选择用于实例化的类.以下是PHP中的两个简单类:
现在可能存在一个变量,使得在运行时实例化的类基于其内容
$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);
我也见过调用Function函数的an approach:
方法#2
var sClassName = 'Genie';
var oGenius = new Function('return new ' + sClassName)();
On the MDN虽然听起来每次创建实例时都会因重新评估而影响性能:
现在我还有一种方法有点单调乏味:
方法#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的字符串可以映射到要实例化的函数?
var myClassName = "Genie";
window[myClassName] = function {};
window[myClassName].prototype = {
perform : function()
{
console.log('I am a ' + myClassName + ',and your wish has been granted!');
}
}
我认为性能将一如既往(因为Javascript内部使用哈希表来引用对象属性,无论如何).
以上是大佬教程为你收集整理的php – 来自动态函数名称的Javascript新对象实例全部内容,希望文章能够帮你解决php – 来自动态函数名称的Javascript新对象实例所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。