<script type="text/javascript">
    
        //工厂方式
        //1、原始方式
        /* var objCar=new Object();
        objCar.name="劳斯莱斯";
        objCar.color="blue";
        objCar.showColor = function() {
          alert(this.color);
          return this.color;
        };
        alert(objCar.name+"  "+objCar.showColor()); */
        
        //问题,以上代码只能创建一个对象,如果创建多个对象,需用重写一份代码
        //解决办法:
        /* function createCar(){
            var objCar=new Object();
            objCar.name="劳斯莱斯";
            objCar.color="blue";
            objCar.showColor = function() {
              alert(this.color);
              return this.color;
            };
            return objCar;
        }
        
        var objCar1=createCar();
        var objCar2=createCar();
        alert(objCar1.name+"  "+objCar1.showColor());
        alert(objCar2.name+"  "+objCar2.showColor()); */
        //问题:创建的两个对象内容完全一样,没用使用价值
        //解决办法:
        /* function createCar(carName,carColor){
            var objCar=new Object();
            objCar.name=carName;
            objCar.color=carColor;
            objCar.showColor = function() {
              alert(this.color);
              return this.color;
            };
            return objCar;
        }
        
        var objCar1=createCar("AAA","red");
        var objCar2=createCar("BBB","yellow");
        alert(objCar1.name+"  "+objCar1.showColor());
        alert(objCar2.name+"  "+objCar2.showColor()); */
        
        //工厂外添加方法
        /* var showColor = function() {
          alert(this.color);
          return this.color;
        };
            
        function createCar(carName,carColor){
            var objCar=new Object();
            objCar.name=carName;
            objCar.color=carColor;
            objCar.showColor = showColor;
            return objCar;
        }
        
        var objCar1=createCar("AAA","red");
        var objCar2=createCar("BBB","yellow");
        alert(objCar1.name+"  "+objCar1.showColor());
        alert(objCar2.name+"  "+objCar2.showColor()); */
        
        //2、构造方式
        /* function Car(carName,carColor){
            this.name=carName;
            this.color=carColor;
            this.showColor = function() {
              alert(this.color);
              return this.color;
            };
        }
        
        var objCar1=new Car("AAA","red");
        var objCar2=new Car("BBB","yellow");
        alert(objCar1.name+"  "+objCar1.showColor());
        alert(objCar2.name+"  "+objCar2.showColor()); */
        
        //3、原型方式
        /* function Car(){};
        Car.prototype.name="CCC";
        Car.prototype.color="red";
        Car.prototype.showColor=function(){
            alert(this.color);
            return this.color;
        };
    
        var oCar1 = new Car();
        var oCar2 = new Car();
        alert(oCar1.showColor());
        alert(oCar2.showColor()); */
        
        //问题:不能传参,属性指向对象,而不是函数,函数可以被多个对象共享,不会出问题
        //对象共享可能会出现问题
        /*function Car(){};
        Car.prototype.name="CCC";
        Car.prototype.color="red";
        Car.prototype.driver=new Array("VVV","KKK");
        Car.prototype.showColor=function(){
            alert(this.color);
            return this.color;
        };
    
        var oCar1 = new Car();
        var oCar2 = new Car();
        
        oCar1.driver.push("BBB");
        
        alert(oCar1.driver);
        alert(oCar2.driver);  */
        
        //问题:没有给oCar2对象加东西,却给加了数据。
        //4、构造+原型
        /* function Car(carName,carColor){
            this.name=carName;
            this.color=carColor;
            //不共享对象
            this.driver=new Array("VVV","KKK");
        }
        
        //共享函数
        Car.prototype.showColor=function(){
            alert(this.color);
            return this.color;
        };
        
        var oCar1 = new Car();
        var oCar2 = new Car();
        
        oCar1.driver.push("BBB");
        
        alert(oCar1.driver);
        alert(oCar2.driver);  */
        
        //5、动态工厂
        /* function Car(sColor,iDoors,iMpg) {
          this.color = sColor;
          this.doors = iDoors;
          this.mpg = iMpg;
          this.drivers = new Array("Mike","John");
          
          if (typeof Car._initialized == "undefined") {
            Car.prototype.showColor = function() {
              alert(this.color);
            };
            
            Car._initialized = true;
          }
        }
        
        
        var objCar1=new Car("AAA","red");
        var objCar2=new Car("BBB","yellow");
        
        objCar1._initialized=true;
        
        alert(objCar1.color);
        alert(objCar2.color);
        
        objCar1.showColor();
        objCar2.showColor(); */
        
        //原型添加成员的方式二
        /* function Car(){};
        Car.prototype={
            name:"313",
            color:"yyy",
            showColor:function(){
                alert(this.color);
            }
        };
        
        var oCar1 = new Car();
        var oCar2 = new Car();
        
        oCar1.showColor();
        oCar2.showColor(); */
        
        //注:js面向对象提供这么多创建对象的方法,哪到底使用哪一种呢。构造+原型使用的最为广泛。
        //动态原型用的也比较多
        
    </script>

转载于:https://blog.51cto.com/cbg23/1639372

js面向对象程序设置——创建对象相关推荐

  1. JS高级程序设置笔记(二)

    5.4 RegExp类型 用这个类来表示正则表达式. var expression = /pattern/flags; pattern部分是任何简单的或者复杂的正则:每一个正则都有一个或者多个标志. ...

  2. 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法

    微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法 参考文章: (1)微信小程序首页index.js获取不到app.js中动态设置的globalDat ...

  3. JS 小程序 Vue 2022年最全面试题!持续更新

    vue面试题 核心原理部分 mvc mvvm和mvp的区别? MVVM 就是 Model-View-ViewModel 的缩写,MVVM 将视图和业务逻辑分开. View:视图层,Model 数据模型 ...

  4. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  5. 对js面向对象的理解

    转自:http://www.cnblogs.com/jingwhale/p/4678656.html js面向对象理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP ...

  6. Javascript面向对象全面剖析 —创建对象

    先介绍目前在ECMAScript中使用最广泛,认同度最高的默认模式. 1.组合使用构造函数及原型 function Person(name,age,job){this.name = name;this ...

  7. JS 面向对象编程、原型链、原型继承(个人学习总结)

    一.面向对象 1. 面向对象 是所有语言 都有的一种编程思想,组织代码的一种形式 基于对象的语言:JS语言 面向对象的语言:c++ java c# 2. 面向对象 3大特征 封装:将重用代码封装到函数 ...

  8. 9.JS面向对象补充

    JS面向对象补充 本文章来源于王红元老师(coderwhy)的 JS高级课程 附上链接:https://ke.qq.com/course/3619571 谁能拒绝一个*100%好评还加课的老师呢 目录 ...

  9. 【何不三连】JS面向对象最后一弹-多态篇(羽化升仙)

    前言 你盼世界,我盼望你无bug.Hello 大家好!我是霖呆呆! 首先抱歉让大家久等了,大家一直期待的"多态"篇到现在才来 ????,其实我最近挺忙的,给张手机截图让大家感受一下 ...

最新文章

  1. 利用套接字实现进程通信一例
  2. integral函数
  3. python中将字符变为大写_Python笔记(一)
  4. 利用Sqoop将MySQL海量测试数据导入HDFS和HBase
  5. DM***+OSPF测试
  6. 用户自定义属性表结构设计_属性类型定制及其妙用
  7. 第十三天-企业应用架构模式-对象-关系元数据映射模式
  8. 如果奇迹有颜色,那么一定是暴力or模拟比较6
  9. 阿里总裁马云对于第5个经济体技术有着独特的见解
  10. 操作系统之多道程序设计
  11. 普中28335开发攻略_凌乱的DSP笔记(1)-F28335基础知识
  12. Raspberry 4B
  13. ROC和 区别p值和q值
  14. 新站长建设网站需要学习知识
  15. Spark大数据技术与应用期末总结大题
  16. php7如何加入环境变量
  17. https自签证书tls握手时错误或go系统错误处理
  18. [转载] 暗潮涌动:警惕IBM温情脉脉背后的垄断野心
  19. 2020年前端面试题(二)之VUE篇
  20. 计算机输入法设计大赛,搜狗输入法皮肤设计大赛获奖作品

热门文章

  1. python基础知识点大全-【python基础学习】基础重点难点知识汇总
  2. NVIDIA Jetson Xavier NX中安装的python库包的版本
  3. SPOJ Supernumbers in a permutation(LIS)
  4. 题目1030:毕业bg
  5. react学习笔记(序)
  6. 电商总结(八)如何打造一个小而精的电商网站架构
  7. FFmpeg for ios架构:中级
  8. C#基础练习(时间的三连击)
  9. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
  10. ASPNET登陆总结