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

【js基础】创建对象的几种常见模式(工厂模式,构造函数模式,原型模式,构造原型组合模式)的更多相关文章

  1. JS数组去重的几种常见方法

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  2. JS创建对象的四种简单方式 (工厂模式和自定义构造函数创建对象的区别)

    // 对象:特指的某个事物,具有属性和方法(一组无序的属性的集合) // 特征------>属性 // 行为------>方法 // 创建对象的四种方式 1 // 1.字面量的方式,就是实 ...

  3. js创建对象的几种方式(工厂模式、构造函数模式、原型模式)

    普通方法创建对象 var obj = { name:"猪八戒", sayname:function () { alert(this.name); } } var obj1 = { ...

  4. js中创建对象的几种方式

    创建对象指创建一个object并给这个对象添加属性和方法,有以下几个方式: 最基本的: var Person={}; Person.name='tom'; Person.age='20'; Perso ...

  5. 【Js】创建对象的6种方式总结、(底部包含属性名为动态的形式)

    一.new 操作符 + Object 创建对象 1 var person = new Object(); 2 person.name = "lisi"; 3 person.age ...

  6. JS 面向对象 ~ 创建对象的 9 种方式

    一.创建对象的几种方式 1.通过字面量创建 var obj = {}; 这种写法相当于: var obj = new Object(); 缺点:使用同一个接口创建很多单个对象,会产生大量重复代码 2. ...

  7. JS进阶-闭包的几种常见形式

    作用域链: //作用域链 var a = 1; function test() { var b =2; return a; } alert(test());//弹出1: alert(b);//不能获取 ...

  8. 比较js中创建对象的几种方式

    1.工厂模式 function createObj(name, sex){ var obj = new Object(); obj.name = name; obj.sex = sex; obj.sa ...

  9. js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法。

    js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } Class ...

随机推荐

  1. 人生苦短之---认识Python

    认识 Python 人生苦短,我用 Python —— Life is short, you need Python 目标 Python 的起源 为什么要用 Python? Python 的特点 Py ...

  2. java中微信统一下单采坑(app微信支付)

    app支付前java后台统一下单文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1 微信支付接口签名校验工具:https ...

  3. Strom

    storm    实时分析概念        离线分析             通常是 需要一段时间的数据积累 积累到一定数量数据后 开始离线分析 无论数据量多大 离线分析 有开始 也有结束 最终得到 ...

  4. django 中文入门文档

    django中文入门文档:阅读地址

  5. laravel5实现第三方登录(微信)

    背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4. 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复. 准备工作 网站应用微信登录是基于OAu ...

  6. linux中crontab的使用方法

    crontab参数说明: -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv V ...

  7. Excel设置excel打印每页都有表头标题

    Excel设置excel打印每页都有表头标题

  8. salesforce lightning零基础学习(十) Aura Js 浅谈三: $A、Action、Util篇

    前两篇分别介绍了Component类以及Event类,此篇将会说一下 $A , Action以及 Util.  一. Action Action类通常用于和apex后台交互,设置参数,调用后台以及对结 ...

  9. Linux 学习手记(2):Linux文件系统的基本结构

    Linux 文件系统概况 Linux文件系统为一个倒置的树状结构,所有文件或文件夹均包含在一个根目录“/”中.如图所示(每个目录的作用可以参考:Linux目录结构说明): Linux系统严格区分大小写 ...

  10. nginx介绍(四) - 反向代理

    前言 前面虚拟主机的部分, 发现我所有的修改, 都是对 nginx 目录下, nginx.conf 和 html 文件夹的操作. 我的最终目的, 是映射到不同电脑的tomcat里面去啊, 操作这里的h ...