一、工厂模式
缺点:没有解决对象识别的问题
优点:解决了创建多个相似对象的问题
         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
 
 

最新文章

  1. Windows下安装python2和python3双版本
  2. Oracle OCP 1Z0-053 Exam Topics
  3. EasyUI树和Ztree树冲突问题
  4. java 获取某个URL的文件扩展名的方法(非精确,精确的扩展名应该使用服务器返回的MIME-TYPE)
  5. IDE、SATA、SCSI、SAS、FC、SSD硬盘类型介绍[zz]
  6. magic-encoding
  7. urllib.request ProxyHandler
  8. WeakHashMap理解
  9. CentOS修改系统默认语言与编码
  10. 超炫HTML5 SVG聊天框拖拽弹性摇摆动画特效
  11. Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决
  12. ngnix 是什么
  13. 《Java大学教程》--第3章 迭代
  14. android中调用c++文件并转为so
  15. Beta冲刺(2/5)(麻瓜制造者)
  16. tmp目录自动清除和tmpwatch命令
  17. tpadmin导入数据库问题
  18. python psutil监控系统资源【转】
  19. (文章转载)MCI编程
  20. Chrome+XX_Net的上网渠道

热门文章

  1. linux中crontab的使用方法
  2. package.json文件中dependencies和devDependencies的区别
  3. 服务端如何安全获取客户端请求IP地址
  4. 最好用的lua编辑器--------emmylua使用汇总
  5. Linux 学习手记(2):Linux文件系统的基本结构
  6. 【精】EOS智能合约:system系统合约源码分析
  7. js中的DOM操作汇总
  8. #5 Python变量与输入输出
  9. 基于tcp协议下粘包现象和解决方案,socketserver
  10. 安装Eclipse时遇到”java was started but returned exit code = 13“如何解决?