博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【js基础】创建对象的几种常见模式(工厂模式,构造函数模式,原型模式,构造原型组合模式)...
阅读量:7072 次
发布时间:2019-06-28

本文共 3213 字,大约阅读时间需要 10 分钟。

一、工厂模式
缺点:没有解决对象识别的问题
优点:解决了创建多个相似对象的问题
function createPerson(name,age,job){            var o = new Object();            o.name = name;            o.age = age;            o.job = job;            o.sayname = function(){                console.log(this.name);            };            return o;       }        var person1 = createPerson("qqq",21,"sss");        person1.sayname();//qqq        var person2 = createPerson("aaa",22,"sas");        person2.sayname();//aaa        console.log(person1 instanceof createPerson);//false        console.log(person2 instanceof createPerson);//false        console.log(person1.sayname === person2.sayname);//false

 

 
 
二、构造函数模式
优点:可以用来创建特定类型的对象,自定义的构造函数
缺点:每个
方法都要在每个实例上重新创建一遍。2个sayName方法不是同一个Function的实例。
function Person(name,age,job){            this.name = name;            this.age = age;            this.job = job;            this.sayname = function(){                console.log(this.name);            };       }        var person1 = new Person("qqq",21,"sss");        person1.sayname();//qqq        var person2 = new Person("aaa",22,"sas");        person2.sayname();//aaa        console.log(person1 instanceof Person);//true        console.log(person2 instanceof Person);//true        console.log(person1.sayname === person2.sayname);//false
 
三、原型模式
优点:可以让所有对象实例共享它所包含的属性和方法。就是直接在原型对象中定义对象实例信息。
缺点:省略了构造函数传递初始化参数,结果所有实例在默认情况下都将取得相同的属性!
 
function Person(){        }        Person.prototype.name = "unio";        Person.prototype.age = "14";        Person.prototype.job = "monitor";        Person.prototype.sayname = function(){               console.log(this.name);        };        var person1 = new Person();        person1.sayname();//unio        var person2 = new Person();        person2.sayname();//unio        console.log(person1 instanceof Person);//true        console.log(person2 instanceof Person);//true        console.log(person1.sayname === person2.sayname);//true

 

四、组合使用构造函数和原型模式
 优点:去掉构造模式和原型模式的缺点,集结二者之优点
function Person(name,age,job){             this.name = name;             this.age = age;             this.job = job;        }        Person.prototype.sayname = function(){               console.log(this.name);        };        var person1 = new Person("qqq",21,"sss");        person1.sayname();//qqq        var person2 = new Person("aaa",22,"sas");        person2.sayname();//aaa                console.log(person1 instanceof Person);//true        console.log(person2 instanceof Person);//true        console.log(person1.sayname === person2.sayname);//true

 

 
五、动态原型模式
 
function Person(name,age,job){             this.name = name;             this.age = age;             this.job = job;             if(typeof this.sayname != "function"){                 Person.prototype.sayname = function(){                       console.log(this.name);                };             }        }        var person1 = new Person("qqq",21,"sss");        person1.sayname();//qqq        var person2 = new Person("aaa",22,"sas");        person2.sayname();//aaa        console.log(person1 instanceof Person);//true        console.log(person2 instanceof Person);//true        console.log(person1.sayname === person2.sayname);//true

 

 
 

转载于:https://www.cnblogs.com/codelovers/p/4399785.html

你可能感兴趣的文章
微软自带的ftp和web服务器的搭建
查看>>
VS2008 程序简单打包
查看>>
Visual Studio 2012 简体中文版新功能介绍及官方下载地址
查看>>
extjs 调用金税COM接口
查看>>
某服务器RAID5阵列数据恢复方案及过程
查看>>
Linux下socket编程
查看>>
双因素方差分析及其类型
查看>>
从零开始完整搭建LNMP环境+WordPress部署
查看>>
windows服务器内存泄露--事件ID2019
查看>>
UML学习笔记(1)之用例图,类图与对象图
查看>>
第八章命令行操作基础
查看>>
spark资源分配
查看>>
333333333333333333
查看>>
我的友情链接
查看>>
oracle 知识点
查看>>
我的友情链接
查看>>
使用摩客原型托管,3分钟搞定原型发布分享预览
查看>>
VMware8.0安装RedHat Enterprise Linux 6(图文完整安装版)
查看>>
Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
查看>>
如何通过配置来实现IP+MAC+端口绑定功能
查看>>