文档章节

javascript对象---9 对象的创建模式

奋斗的小芋头
 奋斗的小芋头
发布于 2016/11/27 23:30
字数 933
阅读 3
收藏 1

对象的创建模式分类

一.工厂模式

1.工厂固定生产一种或几种商品   工厂模式的使用场景 ---对象内部属性值基本一致----》

function Product( proName, Pinpai , createDate){
                
            }
            //创建多个商品对象,除了变量名不同,具有相对独立的内存空间-----商品名称、品牌相同,出产日期不同
            //不同的对象包含相同的属性,造成代码量增多

            var pro1 = new Product("酸奶","哇哈哈","2016-11-27");
            var pro2 = new Product("酸奶","哇哈哈","2016-11-27");
            var pro3 = new Product("酸奶","哇哈哈","2016-11-27");

所以使用工厂模式,对工厂赋值即可

2.工厂模式特点

工厂模式,对创建对象进行了封装,自动组装对象的内部属性

工厂模式,一般用于构建内存内容相似的对象

<script>

        //创建一个商品类----包含商品应有信息
            function
Product( proName, Pinpai , createDate){
                this.proName = proName;
                this.Pinpai = Pinpai
                this.createDate =createDate;
            }
          
 //定义一个产品工厂,为商品信息赋值
            function ProductFactory(){
            
            }
          
 //扩展产品工厂属性
            ProductFactory.proName = "酸奶";
            ProductFactory.Pinpai = "娃哈哈";
            //扩展一个方法
         
   //生产日期不同,用执行一个Date()方式的构造函数
            ProductFactory.createProduct = function(){
                var pro = new Product( ProductFactory.proName, ProductFactory.Pinpai,
new Date() );
                return pro;
            }
            
            var pro1 = new Product("酸奶","娃哈哈","2016-11-28");  //普通创建对象方式
          
 var pro2 = ProductFactory.createProduct();  //工厂创建对象方式
            
            console.log(pro1.proName);
            console.log(pro2.createDate); 
        </script>

二.构造函数模式

构造函数模式:使用构造函数创建对象实例

function Person(name,age){

     //属性
            this.name=name;    //这里this只 window
            this.age=age;

//行为
            this.sayHello = function(){
            console.log("你好,我是" + this.name);
            }
        }


      //person 对象也具有name age属性  

      //通过构造函数创建对象
        var person1 = new Person("Davi",19);

         var person2 = new Person("MIL",20);
        person1.sayHello()

构造函数执行优点:在创建对象同时,就可以给当前对象进行属性赋值

缺点:每次创建对象,都会执行赋值---资源浪费

创建第一个对象,创建一个  function 然后赋值给 run,

创建第二个对象还要创建一个run方法,创建两次函数,但执行的动作相同

每次创建对象,

3.原型模式---原型链构造方式

原型模式:将属性和方法放到构造函数的 prototype  对象中。只要创建当前构造函数的对象,对象本身就具备当前构造函数的原型对象内的方法、属性----使多个对象拥有相同的属性方法。

 

//原型链构造函数
        function Person(){
            
        }
        Person.prototype.run = function(){
            console.log("快速跑");
        }
        var person1 = new Person(); 
        var person2 = new Person(); 
        person1.run();
        person2.run();
        //person1 person2 都共有 Person的原型对象中的方法

缺点:没有办法进行赋值想赋值只能

person1.name ="zhangsan"; 

person1.age =19  -----------------增加额外编码  而且不知道Person内的属性。

1.单纯使用原型链完成对象创建,无法对对象属性进行赋值

2.无法保证每个对象的 属性名 相同

所以要进行第二种第三种整合方式

4.构造原型组合模式  --最好的方式

构造原型组合模式:使用 构造函数 原型模式 组合完成对象创建。构造函数完成基本属性的赋值,原型完成对象函数的绑定

//对象原型组合模式
        //通过构造函数 初始化对象,并赋值
        function Person( name, age){
            this.name=name;
            this.age=age;
        }
        //sayHello 等于一个匿名函数
        Person.prototype.sayHello = function(){
            console.log("名字:"+ this.name);     //this代表当前对象 Person
        }
        //在构建对象同时进行赋值
        var person1 = new Person( "Adad",18);      //person1 引用 Person
        var person2 = new Person( "Mada",18); 
        person1.sayHello();                          //谁调用 this就是谁 this为 person1
        person2.sayHello();

 

 

© 著作权归作者所有

共有 人打赏支持
奋斗的小芋头
粉丝 1
博文 161
码字总数 129412
作品 0
大连
三种简单写法教你Javascript对象封装

这里的内容没有太多深入的东西,更多的内容请移步麦子学院。 Javascript在HTML中变得越来越强大, HTML5中的WebGL等。但是我们书写Javascript的时候往往很随意,使用对象的封装是极好的。这里...

yexiaobo1990
2015/07/23
0
0
《javascript语言精粹》读书笔记 —— 第4章 :函数

1、对象是"key-value"对的集合,并拥有一个连到原型对象的隐形链接。 2、javascript中函数就是对象。 3、函数对象与普通对象的区别: a、 对象字面量产生的对象(非函数对象)连接到Object....

凯奥斯
2013/04/03
0
0
javascript模式 读书笔记一

第一章 简介 模式 模式是指一个通用问题的解决方案。 模式分三种 设计模式 编码模式:javascript特有的 反模式:常见的 引发的问题比解决的问题更多的一种方法。 JavaScript:基本概念 面向对...

lilugirl
2014/01/21
0
1
javascript集锦(一)

javascript集锦(一): javascript作用域: function myFun(){test = 123;}myFun(); //执行myFun后, test在myFun中没有声明var, 被视作全局变量alert(test); //123 javascript闭包:闭包可以记...

ihaolin
2014/03/30
0
0
js面向对象的一些初级知识总结~~

javascript作为一门解释性脚本语言,有着其独特的魅力.既具有函数编程的特性,又具有面向对象的特征.以前的开发中,大多是使用了javascript的函数式编程,最近,发现其的面向对象也有一定的优势,...

乔康007
2013/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
12
1
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部