javascript的对象和函数
javascript的对象和函数
对象
在面向对象对象语言中,类与对象的关系非常明确,一个对象必须是一个类的实例。
而javascript中却没有类的概念,没有了类也就没有继承、多态、重载这些东西了。在一些javascript框架中有关于一些类的定义,这些东西只是通过javascript的特性来模拟面向对象语言,而并非是javascript的本质。
javascript对象,最常用的写法:
- var obj = {};
这就是一个javascript对象,也就是第一节(javascript数据类型)最后所说的复杂数据类型。
定义一个javascript对象还有其他方式,后面再说。
javascript对象,并不是定义完了就不能改变的,随着业务流程的需要你可以在这个对象上添加,删除你需要的属性(变量,方法);
下面是一个例子,用来说明对象的变化:
1,一个消息对象,一开始我不知道里面需要什么东西,所以我定义一个对象里面没有东西
- var notification = {};
2,领导说,这个消息里需要有个Id,那么就可以为这个消息添加一个属性id
- notification.id=1;
这时notification有了id这个属性。如果在面向对象语言中,你知道加这个属性有多麻烦!
3, 领导又说,这个消息里需要有个title,那么就可以为这个消息添加一个属性title
- notification.title="紧急消息"。
4,领导又说了,这个消息能够有个方法,打印出这个notification的title,那么就可以为这个notification添加一个method
- notification.printTitle=function(){console.log(this.title)};
好了,之前定义的那个空的notification对象现在已经有了三个属性。
5,领导某天有心血来潮说,他觉得不需要那个打印方法了,需要去掉。通过下面的方式就可以完成
- delete notification.printTitle;
现在notification这个对象就剩下两个属性了:id 和 title。
6,领导又说,id和title也不想要了,类似的:
- delete notification.title;
- delete notification.id;
现在notification对象已经恢复到刚开始的什么也没有的样子了。
从上面这个流程你可以看出,一个javascript对象,你可以随时对它的属性进行修改,这个对象是能够时时变化的,非常的灵活。
函数
函数最基本的特性是能够被调用。
在javascript中声明函数有多种方式:
function func1(…){…}//常用
var func2=function(…){…};//常用
var func3=function func4(…){…};//不常用
var func5=new Function();//不常用
常用的两种分别为定义式和变量式
定义式:
- function add(a,b){
- return a+b;
- }
变量式:
- var add = function(a,b){return a+b;}
这两种方式都是创建了一个javascript内置对象Function的一个实例,即一个对象(注意这个地方,函数是一个对象)。
可以这么理解函数是一个可以被调用执行的对象,既然是对象,它就拥有对象所具有的一切特性。
需要注意的一点,javascript引擎对两种声明的分析和执行是不同的:
- var a = function(){alert(1);}
- a();
- var a = function(){alert(2);}
- a();
- //执行结果,先输出1,在输出2。
- function b(){alert(3)}
- b();
- function b(){alert(4)}
- b();
- //执行结果,都将输出4.
JavaScript执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。
什么叫一段一段:
<script>第一段</script>
<script>第二段</script>
在同一段程序的分析执行中,定义式的函数语句会被提取出来优先执行。函数定义执行完之后,才会按顺序执行其他语句代码。
对象的声明与定义
1,json形式的声明:
- var a = {};var b={name:'jack',gender:'m'}
2,通过方法(或者说函数)构造对象:
- function A(){};//定义一个函数
- var a = new A();//注意这里产生的是一个对象,千万不要理解成实例,虽然很像,javascript中没有类的概念当然也就没有实例的概念。
- new 是javascript的一个运算符(就相当于 +-*/),new 把上述的语句进行分解,并执行:
- var a ={};
- a.__proto__=A.prototype;//将a的原型链,指向A的原型(prototype不是原型链的一部分,它只是用来存储原型属性的载体!后面章节细说!)
- A.call(a);