JS创建对象(1)

问题:通过类可以创建多个具有相同属性和方法的对象,但ECMAScript中没有类的概念,怎样创建一个对象呢?

先看看JS里对象的定义

ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或函数”。对象的每个属性或方法都有一个名字,每个名字都映射到一个值,也就是所谓的key:value,其中value可以是数据或函数。

创建一个对象有好几种方法,比如:我想创建一个person对象,这个人的名字叫Tom,他今年20岁了,是一名教师~

1.最简单的方法:object构造函数方法

//创建一个object实例

var person=new object();

//为它添加属性

person.name="Tom";

person.age=20;

person.job="teacher";

//为它添加方法

person.sayName=function(){

        console.log(this.name);

};

2.同样的对象,用对象字面量的语法可以写成这样

var person={

        name : "Tom",

        age: 20,

        job : "teacher",

        sayName : function(){

                console.log(this.name);

        }

}

//下面两行是测试的代码,可以忽略

person.sayName();//Tom

console.log(person.age);//20

注:上面两种方法虽然简单,但是有一个致命的缺点,你看出来了吗?

是的,他们可以用来创建单个对象,可是如果你想要很多类似的对象怎么办呢?比如说我想为班上的50个同学每个人都创建一个属于他们的对象,要是按照上面的方法一个一个写,估计我会累死的。而且代码很多都是重复的,只不过是换个值而已,没有一点技术含量更没效率。

                                           解决方法来了!

3.仿照工厂模式创建对象:工厂模式抽象了创建具体对象的过程,我们也可以把创建对象的具体过程封装起来。用什么方法呢?函数!!!

(其实就是把方法1的代码放到函数里,让它变得更灵活)

function createPerson(name,age,job){

        //创建一个object实例

        var o=new object();

        //为它添加属性

        o.name=name;

        o.age=age;

        o.job=job;

        //为它添加方法

        o.sayName=function(){

                console.log(this.name);

        };

        return o;//记着要把结果返回

   }             

现在你可以创建多个相似对象了,但是却没办法知道对象的类型,别着急,程序员的智慧是无穷的

4.用构造函数模式创建对象

function Person(name,age,job){

        this.name=name;

        this.age=age;

        this.job=job;

        this.sayName=function(){

                console.log(this.name);

        }

}

//为Tom创建对象

var person1=new Person("Tom",20,"teacher");

//为Tom的学生创建对象

var person1=new Person("Tommy",12,"student");

注:(1)在这种方法中,我们并没有用new操作符新建一个对象,实际上函数自己帮我们创建了一个对象,它的引用是this,this拿到了当前对象的地址,我们才能把属性添加到对象中去。

你可能感兴趣的:(JS创建对象(1))