<script type="text/javascript">
function New(aClass, paramList) // 通用创建函数
{
function new_() // 定义临时的中转函数壳
{
// 调用原型中定义的构造函数,中转构造逻辑及参数
aClass.Create.apply(this, paramList);
};
new_.prototype = aClass; // 准备中转原型对象
return new new_(); // 返回最终建立的对象
};
var Person =
{
Create: function(name, age)
{
this.name = name;
this.age = age;
},
SayHello: function()
{
alert("Hello, I'm " + this.name);
},
HowOld: function()
{
alert(this.name + " is " + this.age + " years old.");
}
};
var Kevin = New(Person, ["Kevin", 25]);
Kevin.SayHello(); // Hello, I'm Kevin
Kevin.HowOld(); // Kevin is 25 years old.
alert(Kevin.constructor == Object); // true
</script>
注:每次创建完对象退出New函数作用域时,临时的new_函数对象会被自动释放。由于new_的prototype属性被设置为新的原型对象,其原来的原型对象和new_之间就已解开了引用链,临时函数及其原来的原型对象都会被正确回收。代码蓝色一句证明,新建对象的constructor属性返回的是Object函数。其实新建对象自己及其原型里没有constructor属性,那返回的只是最顶层原型对象的构造函数,即Object。
持续更新中......