zoukankan      html  css  js  c++  java
  • javascript构造器模式创建对象

      工厂模式创建对象,虽然符合正常思维。

      但由于对象在函数内部定义,故无法得知对象的类型(均为Object)。

      使用构造器模式,可以创建特定类型的函数实例:

      function Dog(age,size)
      {
        this.age=age;
        this.size=size;
        this.toAge=function(){
          alert(this.age);
        };
      }
    
      var dog1=new Dog(10,20);
      var dog2=new Dog(22,1);

      此时,上述函数可以认为是对象的构造函数。

      例子中,直接将属性赋值给了this对象,而创建对象的构造函数和构造器相同,例如:

      alert(dog1.constructor==Dog);//true
    

      那么,所创建的对象类型是什么呢?

      alert(dog1 instanceof Object);//true
      alert(dog1 instanceof Dog);//true
    

      对,构造函数可以将他的实例标识为一种特定的类型Dog类型。

      并且构造函数作为函数,当然可以单独调用:

    //作为普通函数调用
      Dog(11,22);//添加到了window作用域
      window.toAge();//11
    //在另外一个对象的作用域中调用
      var o ={};
      Dog.call(o,11,22);
      o.toAge();//11
    

      但是上述构造器,在生成实例时,实际操作如下代码:

      function Dog(age,size)
      {
        this.age=age;
        this.size=size;
        this.toAge= new Function("alert(this.age)");
      }
    

      显然,每一个实例都有一个Function实例。

      alert(dog1.toAge==dog2.toAge);//false
    

      因此我们可以将函数定义转移到构造器外部。

      function Dog(age,size)
      {
        this.age=age;
        this.size=size;
        this.toAge=toAge;
      }
    
      function toAge()
      {
        alert(this.age);
      }
     
      var dog1=new Dog(11,22);
      var dog2=new Dog(2,33);
    

      此时,减少了内存使用。但是,全局函数你懂的...

  • 相关阅读:
    php连接mySql数据库 示例
    javascript Worker子线程
    js + php服务器推送see(自定义推送时间)
    javascript js获取html元素各种距离方法
    javascript 浅复制 和 深复制
    javascript 对象api
    php 搭建webSocket
    javascript 客户端webSocket示例
    javascript 集合 Object Array Map Set
    javascript json语句 与 js语句的互转
  • 原文地址:https://www.cnblogs.com/stonl/p/4255249.html
Copyright © 2011-2022 走看看