[JavaScript]对象创建方法

1、使用Object或对象字面量创建对象

  (1)使用Object创建对象

var cat= new Object();
cat.name = "Tom";
cat.color= "blue";

  (2)对象字面量创建对象

     

var cat = {
   name : "Tom",
   color : "blue"
};

  局限性:当需要创建n个同类重复对象时,需要重复代码n次。

2、工厂模式创建对象

  通过普通函数将对象的创建过程封装起来,给出特定的接口来初始化对象。

 1 function genCat (name,color){
 2     var obj = new Object();
 3     obj.name=name;
 4     obj.color=color;
 5     return obj;
 6 };
 7
 8 var cat1 = genCat("Tom","blue");
 9 function genDog (name,color){
10     var obj = new Object();
11     obj.name=name;
12     obj.color=color;
13     return obj;
14 };
15
16 var dog1 = genDog("Snoopy","white");

  局限性:对于这种工厂方法创建出来的对象,我们无法得知对象具体属于哪一类。如上述代码中的cat1和dog1,如果使用instanceof去检测,会发现cat1和dog1都属于Object类型。而我们的初衷是希望cat1属于Cat类,dog1属于Dog类。

3、构造函数模式创建对象

 1 function Cat (name,color){
 2     this.name=name;
 3     this.color=color;
 4     this.yell=function(){
 5         return this.name + ‘mew!‘;
 6     }
 7 };
 8
 9 var cat1 = new Cat("Tom","blue");
10 function Dog (name,color){
11     this.name=name;
12     this.color=color;
13     this.yell=function(){
14         return this.name + ‘bark!‘;
15     }
16 };
17
18 var dog1 = genDog("Snoopy","white");
19
20 alert(cat1 instanceof Cat);  //true
21 alert(dog1 instanceof Cat);  //false
22 alert(cat1 instanceof Dog);  //false
23 alert(dog1 instanceof Dog);  //true

   通过构造函数创建出的对象如上述代码可知,解决了对象类型归属的问题,能够明确检测对象属于哪一具体类型。

    局限性:通过构造函数创建对象时,当一个构造函数被实例化n次时,构造函数中的函数也被实例化了n次,如上述代码中的this.yell(),同一类型的不同对象之间并不共用同一函数,造成了内存的浪费。

4、原型模式创建对象

  我们创建的每一个函数都有一个prototype属性,该属性是一个指针,该指针指向了一个对象。对于我们创建的构造函数,该对象中包含可以由所有实例共享的属性和方法。

  在默认情况下,所有原型对象会自动包含一个constructor属性,该属性也是一个指针,指向prototype所在的函数。

  在调用构造函数创建新的实例时,该实例的内部会自动包含一个[[Prototype]]指针属性,该指针指便指向构造函数的原型对象。

  

  通过在构造函数原型对象中添加属性和方法就可以实现在对象间数据的共享了。

 1 function Cat(){
 2 };
 3
 4 Cat.prototype.name="Tom";
 5 Cat.prototype.color="blue";
 6 Cat.prototype.yell=function(){
 7     return this.name + "mew!";
 8 };
 9
10 var cat1= new Cat();
11 var cat2= new Cat();
12 alert(cat1.yell() == cat2.yell());    //true 两者共享同一函数

  局限性:原型对象实现了对象间属性的共享,但在通常情况下我们希望不同的实例拥有自己单独的属性。所以一般情况下,我们使用构造函数模型和原型模型结合使用创建对象,就可以兼得方法的共享和属性的不共享。

 1 //每只猫有自己的名字和颜色
 2 function Cat(name,color){
 3     this.name = name;
 4     this.color = color;
 5 };
 6
 7 //所有的猫都共享一个yell()方法
 8 Cat.prototype.yell=function(){
 9     return this.name + "mew!";
10 };
11
12 var cat1= new Cat("Tom","blue");
13 var cat2= new Cat("Garfield","yellow");
14
15 alert(cat1.yell());           //Tom mew!   实例属性
16 alert(cat2.yell());              //Garfield mew! 实例属性
17
18 alert(cat1.yell() == cat2.yell());  //true  两者共享同一函数
时间: 2024-07-30 00:01:57

[JavaScript]对象创建方法的相关文章

3种创建、调用JavaScript对象的方法

hey you guys,两个月没有写技术博客了.作为一名有理想.有抱负的程序员,两个月不写技术博客,真该打.业精于勤,荒于嬉.行成于思,毁于随.勤奋是必不可少的,今后养成一周至少一篇博客的习惯.好了,不瞎扯了,书归正传.  今天在做项目时,遇到了需要创建JavaScript对象的情况.所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码.感觉方法挺好的,在这里与大家分享一下. 一.利用函数创建对象: //定义对象 function Animal(type)

创建JavaScript对象的方法

方法一:object类型方法 var  person = new Object(); person.name="alisa"; person.age="16"; person.sex="female"; person.sayname = function(){ return this.name; } 方法二:对象字面量方法 var person={ name:"alisa", age:16, sex:"female&

深入JavaScript对象创建的细节

最近深入学习javascript后,有个体会:面向对象的方式编程才是高效灵活的编程,也是现在唯一可以让代码更加健壮的编程方式.如果我们抛开那些玄乎的抽象出类等等思想,我自己对面向对象的从写程序的角度理解就是:复用和封装.复用具体就是让你尽量少写重复代码,封装就是将一些耦合度很高的逻辑放到一个程序块里,而且尽量让里面内容不受外界影响.最后的结论是:优秀的javascript代码都是面向对象的.定州市科技工业局 如何构建javascript对象?ECMA-262对对象的定义是:无序属性的集合,其属性

javascript对象创建及原型继承的研究

今天总结了下javascript关于原型继承和对象创建方面的东西,因为javascript的原型继承在使用传统面向对象语言开发的同学看来比较怪异,原型继承确实比传统OOP语言的继承理解和运用起来困难一些,当然个人觉得传统OOP的继承相对比较简单,因为中规中矩. 下面逐个的用示例说明javascript中对象创建方式,专业一点叫什么模式,主要有直接单个创建:工厂模式:提出方法类函数公用方式:构造函数模式:构造函数+原型方式:使用原型本质的方式构建(这种受过李站的<悟透javascript>一书的

对象创建方法

创建方法1.构造函数语法(构造函数的名称通常是首字母大写) 1 var myObj = new Object(); 2 myObj['key1']='value'; 3 myObj['key2']='value'; 4 myObj.key='value'; 5 myObj.key3=' '; 6 myObj.key='value';7 myObj.functionName=function(){ statements;}; 2.字面量语法 1 var myObj = { 2 key: value

给JavaScript 对象添加方法

方法只不过是附加在对象上的函数. 在构造器函数内部定义对象的方法: 1 <!DOCTYPE html> 2 <html> 3 <body> 4 <script> 5 function person(firstname,lastname,age,eyecolor) 6 { 7 this.firstname=firstname; 8 this.lastname=lastname; 9 this.age=age; 10 this.eyecolor=eyecolor

javascript对象创建

一个js对象中有 [[proto]] [[class]]  [[extensible]] 三个对象标签 ,在对象的属性上有 writable ,enumerable,configurable,value,get/set 五个属性标签  [[proto]] 对象的原型  [[class]]  对象所属的类型 [[extensible]] 是否可以增加新的属性 writable  对象的属性是否可写 enumerable 对象的属性是否可以枚举 configurable 对象的属性是否可配置 val

原生javascript对象的方法

create Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象. Object.create(proto [, propertiesObject ]) proto 为新创建对象的原型对象,设置为null可创建没有原型的空对象. propertiesObject 包涵若干个属性的描述符和defineProperties的第二个参数一样. Object.create(Object.prototype, { a: { value: 1, writable: true, c

JavaScript对象创建,继承

创建对象 在JS中创建对象有很多方式,第一种: var obj = new Object(); 第二种方式: var obj1 = {};//对象直面量 第三种方式:工厂模式 function Person(){ var obj = new Object(); obj.name = 'xxx'; obj.age = 12; return obj; } var p1 = Person(); typeof p1 ;// object 第四种方式:构造函数模式 var Person = functio