javascript对象的几种创建方式

1,工厂模式
2,构造函数模式
3,原型模式
4,混合构造函数和原型模式
5,动态原型模式
6,寄生构造函数模式
7,稳妥构造函数模式

第一种模式:工厂方式
var lev=function(){  

   return "啊打";
};
function Parent(){
       var  Child = new Object();
       Child.name="李小龙";
       Child.age="30";
       Child.lev=lev;
     return Child;
};  

var  x = Parent();
alert(x.name);
alert(x.lev()); 

说明:

1.在函数中定义对象,并定义对象的各种属性,,虽然属性可以为方法,但是建议将属性为方法的属性定义到函数之外,这样可以避免重复创建该方法

2.引用该对象的时候,这里使用的是 var x = Parent()而不是 var x = new Parent();因为后者会可能出现很多问题(前者也成为工厂经典方式,后者称之为混合工厂方式),不推荐使用new的方式使用该对象

3.在函数的最后返回该对象

4.不推荐使用这种方式创建对象,但应该了解

第二种模式:构造函数方式

var lev=function(){  

   return "啊打";
};
function Parent(){  

       this.name="李小龙";
       this.age="30";
       this.lev=lev;  

};  

var  x =new  Parent();
alert(x.name);
alert(x.lev());  

说明:

1.与工厂方式相比,使用构造函数方式创建对象,无需再函数内部重建创建对象,而使用this指代,并而函数无需明确return

2.同工厂模式一样,虽然属性的值可以为方法,扔建议将该方法定义在函数之外

3.同样的,不推荐使用这种方式创建对象,但仍需要了解

第3种模式:原型模式

var lev=function(){  

   return "啊打";
};
function Parent(){  

};
  Parent.prototype.name="李小龙";
  Parent.prototype.age="30";
 Parent.prototype.lev=lev;  

var  x =new  Parent();
alert(x.name);
alert(x.lev());  

说明:

1.函数中不对属性进行定义

2.利用prototype属性对属性进行定义

3.同样的,不推荐使用这样方式创建对象

第四种模式:混合的构造函数,原型方式(推荐)

function Parent(){
  this.name="李小龙";
 this.age=32;  

};
Parent.prototype.lev=function(){  

   return this.name;
};;  

var  x =new  Parent();  

alert(x.lev());  

说明:

1.该模式是指混合搭配使用构造函数方式和原型方式

2.将所有属性不是方法的属性定义在函数中(构造函数方式)

将所有属性值为方法的属性利用prototype在函数之外定义(原型方式)

3.推荐使用这样方式创建对象,这样做有好处和为什么不单独使用构造函数方式和原型方式,由于篇幅问题这里不予讨论

第五种模式:动态原型方式

function Parent(){
  this.name="李小龙";
 this.age=32;
;
 if(typeof Parent._lev=="undefined"){  

     Parent.prototype.lev=function(){  

               return this.name;
     }
     Parent._lev=true;
 }  

};   

var  x =new  Parent();  

alert(x.lev());  

说明:

1.动态原型方式可以理解为混合构造函数,原型方式的一个特例

2.该模式中,属性为方法的属性直接在函数中进行了定义,但是因为用_lev作为一个标志来判断是否已经给原型创建了方法。从而保证创建该对象的实例时,属性的方法不会被重复创建

3.推荐使用这种模式

原文:
http://www.cnblogs.com/mizzle/archive/2011/07/06/2099342.html

http://segmentfault.com/a/1190000002481476

时间: 2024-08-02 02:47:32

javascript对象的几种创建方式的相关文章

爱创课堂每日一题第五十八天-javascript对象的几种创建方式

1,工厂模式 2,构造函数模式 3,原型模式 4,混合构造函数和原型模式 5,动态原型模式 6,寄生构造函数模式 7,稳妥构造函数模式

JavaScript 对象的几种创建方法

1 /** 2 * Created by 2016 on 2016/6/4. 3 */ 4 function Box(){ 5 var obj = new obj(); 6 obj.name = "Lee"; 7 obj.run = function(){ 8 return this.name+"run"; 9 }; 10 return obj; 11 } 12 var B = Box(); 13 //工厂模式创建对象 在对象中创建obj,在最后返回obj对象 14

JS 对象的三种创建方式

变量 instanceof 类型的名字----->布尔类型,true就是这种类型,false不是这种类型 在当前的对象的方法中,可以使用this关键字代表当前的对象 1.调用系统的构造函数创建对象 var 变量名= new Object(); Object 是系统的构造函数 Array 添加属性-----如何添加属性? 对象.名字=值; 修改属性-----如何修改属性? 对象.名字=值; 添加方法-----如何添加方法? 对象.名字=函数; 属性调用-----对象名.属性 或者 对象名[“属性名

JS对象的几种创建方式

1.join() join(separator): 将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符,该方法只接收一个参数:即分隔符. 1 2 3 4 var arr = [1,2,3]; console.log(arr.join()); // 1,2,3 console.log(arr.join("-")); // 1-2-3 console.log(arr); // [1, 2, 3](原数组不变) 通过join()方法可以实现重复字符串,只

前端中对象的几种创建方式

1.字面量创建(JSON格式创建)创建了一个名字为obj1的空对象    var obj1 = {}; 可以通过.语法或者[]语法为对象添加属性或方法. obj1.name = '小白'; obj1.age = '3';    obj1.sex = '男';    obj1.idCard = '1234567898974565123213'    obj1.height = '180cm';    obj1.weight = '60kg';    obj1.run =function(){   

2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)

摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller 模型-视图-控制器)是一种Web架构的模式,所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求. M

Java---11---多线程的两种创建方式

多线程的两种创建方式: 下面这些东西是API文档中的: public class Thread extends Object implements Runnable 线程 是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程.每个线程都可以或不可以标记为一个守护程序.当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护

Python Django 多对多三种创建方式 form组件 cookie和session

一 表中多对多关系三种创建方式 以Book表和Author表多对多关系例 1.第一种方式:全自动(推荐使用):models.ManyToManyField(to='类名') 优点:不需要你手动创建第三张表 缺点:第三张表不是你手动创建的,字段是固定的无法拓展 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_place

多对多三种创建方式、forms组件、cookies与session

多对多三种创建方式.forms组件.cookies与session 一.多对多三种创建方式 1.全自动 # 优势:不需要你手动创建第三张表 # 不足:由于第三张表不是你手动创建的,也就意味着第三张表字段是固定的无法做扩展 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_places=2) authors = mode