ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值,对象或者函数。所以js中对象就是一组键值对。
面向对象的语言中,都是通过类的来创建任意多个具有相同属性和方法的对象实例的。但是js中没有类的概念,接下来我先通过一个例子来阐述js中没有“类”的概念蕴含的哲学。这点会让初学者很困惑,但是也正因为放下了“类”的概念,js对象才有了其他编程语言没有的活力。事实上js中对象的“类”是从无到有,又不断演化,最终消失于无形之中。
举例:小蝌蚪找妈妈的故事,小蝌蚪在其自身类型不断演化的过程中,逐渐变成了和妈妈一样的“类”。
代码:
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<title>小蝌蚪找妈妈</title>
</head>
<body>
<script>
var life={};//光溜溜的生命
for(life.age=1;life.age<=3;life.age++)
{
switch (life.age)
{
case 1:
life.body="卵细胞";//增加body属性
life.say=function(){
console.log(this.age+this.body);
};//新建say方法
break;
case 2:
life.tail="尾巴";//增加tail属性
life.gill="腮";//增加gail属性
life.body="蝌蚪";
life.say=function(){
console.log(this.age+this.body+'-'+this.tail+","+this.gill);
};
break;
case 3:
delete life.tail;//删除tail属性
delete life.gill;//删除gill属性
life.legs="四条腿";//增加legs属性
life.lung="肺";//增加lung属性
life.body="青蛙";
life.say=function(){
console.log(this.age+this.body+"-"+this.legs+","+this.lung);
};
break;
}
life.say();//调用say方法,每次逻辑都会发生动态改变
}
</script>
</body>
</html>