JavaScript中的“动态反射模式”

注:本文中部分描述都是操作我的书《JavaScript高级应用与实践》而言,还请朋友们多多支持我的书,详情请见:

博主网站地址:

http://m9m.3322.org/doc/js/md00.jsp

“北京电子工业出版社”地址

http://www.phei.com.cn/bookshop/bookinfo.asp?bookcode=TP061230%20&booktype=main

动态反射,就是指在不确定方法名、属性名的情况下,对已经实例化对象进行访问的一种设计模式。
JavaScript天生异禀,与生俱来就已经支持动态反射功能了。请看下面的示例:
function Reflect(o, prop)
{
var a = Array.apply(null, arguments);
// 简单的一行return让方法的反射支持两种调用方式
return 2 == a.length ?
o[prop] :
o[prop].apply(o, Array == a[2].constructor ? a[2] : (a.shift(), a.shift(), a));
}

// 使用:
var obj = {name: "xiatian", dsp: function()
{
var b = [this.name];
Array.prototype.push.apply(b, arguments);
alert(b.join("\n"));
return b
}};
// 获取属性
alert(Reflect(obj, "name"));
// 调用方法,而调用方法的方式则有下面两种方式
Reflect(obj, "dsp", "第一个参数", "第二个参数", "第三个参数");
Reflect(obj, "dsp", ["one", "two", "three"]);

你可能感兴趣的:(JavaScript中的“动态反射模式”)