JavaScript学习总结--创建对象

ECMA-262定义的对象是:无序属性的集合,其属性可以包含基本值、对象或者函数

说白了就是把一组特定的变量和方法封装起来

那么我们先创建一个对象

var person=new Object();
person.name="Sakura";
person.age=22;
person.job="前端开发";
person.sayName=function(){
  console.log(this.name);  
}
//当一个变量被封装在一个对象中时,这个变量就可以称为该对象的一个属性
//同样的,当一个函数被封装在一个对象中时,这个函数就可以称为该对象的一个方法

实际上这种写法较为古老,所以我们可以用对象字面量的方法重写一下

var person={
  this.name="Sakura",
  this.age=22,
  this.job="前端开发",
  this.sayName=function(){
    console.log(this.name);  
  }
}

这样一个对象就被创建出来了,当我们需要调用对象的某个方法,或者获取对象的某个属性时,就可以用“.”号来调用

var a=person.name;    //获取对象的属性
console.log(a);        //Sakura    

person.sayName();    //调用对象的方法

一般来说这样创建的对象在某些情况下能满足我们的一些需求,然而事实情况是我们可能在实际工作中需要创建大量的具有某些相同特征(属性或方法)的对象

这就涉及到了代码的复用性,毕竟谁也不愿意一遍一遍的写重复的东西,所以聪明的程序员们发明了几种可复用的对象创建方法】

1.工厂模式

工厂模式抽象了创建具体对象的过程,实际上就是一个封装特定接口用来创建对象的函数

function createPeson(name,age,job){
  var obj=new Object();
  obj.name=name;
  obj.age=age;
  obj.job=job;
  obj.sayName=function(){
    console.log(this.name);
    //要注意这里的this代表obj,而非createPerson
  }
  return obj;
}

这个createPerson就是工厂方法,它接收三个参数,之后会在内部创建一个新的对象,并将属性和方法初始化,最后返回出这个对象

var person_01=createPerson("Sakura",22,"前端开发");
var person_02=createPerson("Misaka",20,"网页设计");

这样一来我们可以不用写过多冗余的代码,仅仅用一个工厂方法就可以创建更多不同的对象

凡事皆有但是,在之前我们用instanceof运算符来确定对象的类型,当时我们的代码是这样的

var abc=function(num){
  return num+1;
}
console.log(abc instanceof Object);    //一切皆对象
console.log(abc instanceof Function);    //Function类型的对象

我们注意到,abc函数既是Object又是Function,那么我们可以认为函数abc是Function类型的Object

同理,一个数组就是Array类型的Object

然而我们以上创建的person_01是啥玩意?

没错他只是Object,假如我们工作中需要创建很多个工厂模式,基于这些工厂方法又创建很多种不同的对象,那么怎么区分这些对象是什么类型或者说是哪个工厂方法创建的?

显然instanceof并不能告诉我们答案

...

posted @ 2016-06-01 20:28  Sakura_大表哥  阅读(405)  评论(2编辑  收藏  举报