一、数组与对象之间的比较
想要快速入门JavaScript的面向对象部分,需要把对象跟数组比较。
数组是键值对,对象也是键值对。【注意,JavaScript将函数也看作一种数据】
其次,数组用中括号初始化,对象用大括号初始化。
//定义一个数组,数组中也可以有函数
var array1 = [1,"s",3.1,function(){}];
//定义一个对象
var student = {
name:"wang",
gender:"male",
talk:function(){
//say Something
}
};
上面定义了一个student对象,有两个属性和一个方法。键和值之间用冒号隔开。
注意,键值可用引号,当键名是保留字、包含空格或者特殊字符或者以数字开头的时候必须要有引号。
注意,对象中可以有任何数据类型,当然包括对象。
二、访问对象的属性
- 中括号法:
如访问上面student的name属性
var myname=student[name]
- 点号访问法:
var myname=student.name
访问的属性不存在,会返回undefined
访问方法的方法同上,但是括号访问法不常用。
student.say();
student['say']();
三、对属性和方法的动态更改
作为一门动态语言,JavaScript允许对现存的对象修改其属性和方法。
增加与修改:
//修改student的name属性
student.name="Li";
//增加一个学号no属性
student.no='20131120220';
删除
//删除gender属性
delete student.gender;
this与构造器函数用法同Java
function student(Name,Gender)
{this.name=Name;
this.gender=Gender;
this.sayHi=function(){
alert("Hi " + this.name);}
}
//记住js是弱类型 所以下面是var不是
var s1=new student("Li","male");
s1.sayHi();
四、构造器属性constructor
我们在创建对象时,同时也赋予了对象构造器属性constructor。
例如上面的student:
>>>student.constructor
student(Name,Gender)
//没有构造器函数的,返回内建构造器Object()
>>>var a={}
>>>a.constructor
Object()
//instanceof操作符可以测试一个对象是否由某个指定的构造器函数创建。
>>>var s2=new student("Guo","female");
>>>s2 instanceof student;
true
>>>a instanceof Object
true