《悟透JavaScript》学习札记十一之原型真谛一

来源:互联网 发布:剑网3女神脸数据 编辑:程序博客网 时间:2024/05/01 17:55

 <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。

持续更新中......

原创粉丝点击