// 声明对象的方法 一 (通过常量直接赋值)
var xiaoming = {//声明一个对象(直接通过一个常量xiaoming用{}赋值的方式声明) name: '小明', //对象的一个属性 属性与属性之间用,逗号分隔。 age: 40, //对象的一个属性 sex: '男', //对象的一个属性 job: function(){//对象的一个方法 alert('小明很会演戏'); return '对象方法返回值'; } } alert(xiaoming.name); // xiaoming.job();//调用小明对象的方法 结果:小明很会演戏 alert(xiaoming.job());//对象方法返回值 结果: 对象方法返回值 //调用的如果是对象的方法属性后面要加()
//声明对象的方法 二 ( 通过new Object() 声明)
var xiaoming = new Object();//另一种声明 一个对象的方法 xiaoming.name = '小明'; //此种方法用.属性 = 属性值。来表示一个 对象的属性 xiaoming.age = 40; //声明xiaoming对象的一个属性 xiaoming.sex = '男'; //声明xiaoming对象的一个属性 xiaoming.job = function(){ //声明xiaoming对象的一个方法 alert('小明很会演戏'); } alert(xiaoming.name);//调用 xiaoming 这个对象的一个属性。 结果:小明 xiaoming.job()//调用 xiaoming 这个 对象的方法 结果:小明很会演戏
//声明对象的方法 三 ( 通过 Object() 声明 省略了new)
var xiaoming = Object(); //第三种声明一个对象 xiaoming 的方式。 xiaoming.name = '小明'; //声明xiaoming对象的一个属性 xiaoming.age = 40; //声明xiaoming对象的一个属性 xiaoming.sex = '男'; //声明xiaoming对象的一个属性 xiaoming.job = function(){// 声明xiaoming 对象的一个方法(功能) alert('小明很会演戏'); } alert(xiaoming.age); //40 调用xiaoming对象的 一个属性 结果:40 xiaoming.job(); //调用xiaoming 这个对象的 一个方法(功能) 结果:小明很会演戏
//补充 .属性 完全等价于 ['属性']
var xiaoming = Object(); xiaoming['name'] = '小明'; xiaoming['age'] = 40; //xiaoming["age"]与xiaoming.age 效果一样 都是表示 对象的属性,只不过是两种写法而已。 xiaoming['sex'] = '男' xiaoming['job'] = function(){ alert('小明很会演戏'); } alert(xiaoming['age']);// 40 xiaoming['job'](); // 小明很会演戏
总结:对象(既能够存储数据,又能够存储函数)
面向对象编程示例:
/* 例子:
有一辆车60km/h,有一条路1000km,问车跑在路上,多久跑完?
*/
// 面向过程编程思想:只关心数学逻辑。
var hour = 1000 / 60; alert(hour); //16.666666666666668
面向对象的编程思想:将生活逻辑,直接映射到我们的程序中。 1、找实体 车 属性: speed 60km/h 功能: 跑在路上 路 属性: length 1000km 让车跑在路上,跑完以后,告诉我结果。 2、分析实体的属性和功能 3、让实体之间相互作用,最终得出结果。
var car = { //声明一个 car 对象 speed: 60, //声明 car 对象的一个属性speed 速度60 run: function(road){ //声明 car 对象的一个方法(功能),能以60的数度跑在路上 return road.length / car.speed;// 方法的返回值是消耗的的时间 } } var kuahaidaqiao = {//跨海大桥(假设路是跨海大桥) length: 1000 } //car对象和kuahaidaqiao对象相互作用(车跑在跨海大桥上) var hour = car.run(kuahaidaqiao);/*调用car对象的run方法作用在对象kuahaidaqiao上。 此时 car对象的 run方法 的形参 road 就等于对象 kuahaidaqiao 所 以 road.length属性就等于kuahaidaqiao.length属性*/ alert(hour);//16.666666666666668
可见这中编程方式语义化很强。