对象 - 可以new的对象

本文导航

  1. 增加属性
  2. 实例
  • 作者:KK

  • 发表日期:2016.2.22


前面教大家使用{}来创造对象,这里教大家创建另一种对象,我想说它是,但想了想在JS里好像不能用这个概念来谈论它

哎呀我也不知怎么说它好了

反正吧,这回我们来创造一种可以new的对象,就像new Object()一样,我们要创造类似Object的东西

function a(){} //这是个空函数,对吧
var a1 = new a(); //就这么简单

其实一个函数就是一个可以new的东西,对不起老早教了你函数却今天才告诉你可以new~

但是你不能让变量与函数名发生冲突喔,var a = new a();这样是犯法的!


增加属性

在函数体里面通过this.新增属性名 = 属性值的代码来实现增加属性

function Boy(){
	this.name = '小明'; //本身是没有name属性的,第一次设置值,就是新增属性值了
	this.gender = '男';
	this.age = 13;
	
	this.name = '算了我还是不叫小明了'; //就算有了name属性也能重新设置值
}

var xiaoMing = new Boy();
alert('名字:' + xiaoMing.name);
alert('岁数:' + xiaoMing.age);

alert(xiaoMing.like); //访问一个不存在的属性like会提示undefined(未定义)
xiaoMing.like = 999; //从外部增加属性也可以
alert('从外部设置了like属性后,like的值是:' + xiaoMing.like); //999

delete xiaoMing.name; //用delete语句可以删除一个属性
alert('删除了name属性后,name的值是:' + xiaoMing.name);

无论是花括号{}构造的对象还是new出来的对象,都可以从外部临时增加属性


实例

通过function定义的对象就相当于一个"模具"一样,比如一个月饼模具,是不是可以盖出很多个不同的月饼?不同在哪里呢,第1个月饼的蛋黄可能偏左上角,第2个月饼的蛋黄可能正在中央,第3个月饼可能只有半块蛋黄,第4个月饼还可能是双蛋黄...所以,每个月饼都是不同的是不是!

先看看下面的代码再说:

function Boy(){
	this.name = '还没起名';
}

var xiaoMing = new Boy(); //xiaoMing是第1个实例
xiaoMing.name = '小明';
alert('第1个名字叫:' + xiaoMing.name);

var xiaoDong = new Boy(); //xiaoDong是第2个实例
alert('第2个名字叫:' + xiaoDong.name); //名字不叫小明

为什么xiaoDong的名字不叫小明呢?原因就是xiaoDong是Boy这个模具盖出来的,刚刚new的时候,xiaoDong的属性值和Boy函数里面定义的初始值是一模一样的

第1次new的xiaoMing修改了名字但不会影响xiaoDong的名字,他们现在是两个不同的人,各有各的名字,就像月饼一样,各有各的内在模样,只是外面像而已

两个变量都是Boy函数的实例,关于function定义的对象学问可多了,基础教程先讲到这里,未来深入教程再进一步说它吧