javascript——创建对象的方式

创建一个对象然后给这个对象新建属性和方法。

<一>最基本的方法

var box = new Object();     //创建一个Object对象
box.name = 'Lee';           //创建一个name属性并赋值
box.age = 100;              //创建一个age属性并赋值
box.run = function(){
 return this.name + this.age + '运行中...';
};

alert(box.run());           //输出属性和方法的值

上面创建了一个对象,并且创建属性和方法,在run()方法里的this,就是代表box对象本身。这种是JavaScript创建对象最基本的方法,但是有个缺点,想创建一个类似的对象,就会产生大量的代码。

var box2 = box;           //得到box的引用

box2.name = 'Jack';    //直接改变了name属性

alert(box2.run());         //用box.run()发现name也改变了

var box2 = new Object();

box2.name = 'Jack';

box2.age = 200;

box2.run = function(){

 return this.name + this.age + '运行中...';

};

alert(box2.run());             //这样才避免和box混淆,从而保持独立

<二>工厂模式

为了解决多个类似对象声明的问题,我们可以使用一种叫做工厂模式的方法,这种方法就是为了解决实例化对象产生大量重复的问题。

function createObject(name,age){                            //集中实例化的函数

 var obj = new Object();

 obj.name = name;

 obj.age = age;

 obj.run = function(){

  return.this.name + this.age + '运行中...';

 };

 return obj;

}

var box1 = createObject('Lee',100);          //第一个实例

var box2 = createObject('Jack',200);         //第二个实例

alert(box1.run());

alert(box2.run());                                        //保持独立

工厂模式解决了从夫实例化的问题,但还有一个问题,那就是识别的问题,因为根本无法搞清楚他们到底是哪个对象的实例。

alert(typeof box1);                                    //Object

alert(box1 instanceof Object);                  //true

<三>构造函数模式

ECMAScript中可以采用构造函数(构造方法)可以来创建特定的对象。类似于Object对象。

function Box(name, age){                                       //构造函数模式

 this.name = name;

 this.age = age;

 this.run = function(){

  return this.name + this.age + '运行中...';

 };

}

var box1 = new Box('lee',100);                                 //new Box()即可

var box2 = new Box('Jack',200);

alert(box1.run());

alert(box1 instanceof Box);                                    //很清晰的识别他从属于Box

使用构造函数的方法,即解决了重复实例化的问题,又解决了对象识别的问题,但是问题是,这里并没有new Object(),为什么可以实例化Box(),z这个是哪里来的呢?

使用了创造函数的方法,使用工厂模式的方法他们不同之处如下:

1、构造函数方法没有显示的创建对象(new Object());

2、直接将属性和方法赋值给this对象;

3、没有renturn语句。

构造函数的方法有一些规范:

1.函数名和实例化构造名相同且大写,(PS:非强制,但是这么写有助于区分构造函数和普通函数);

2.通过构造函数创建对象,必须使用new运算符。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

招风的黑耳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值