谈一谈对象

来源:互联网 发布:淘宝模版如何制作 编辑:程序博客网 时间:2024/06/06 20:17

别想太多,是JavaScript对象


不同于JAVA这类面向对象(Object-Oriented,OO)的语言,JavaScript没有类的概念。因此它的对象也与基于类的语言中的对象有所不同。

ECMA-262中把对象定义为:无序属性的集合,属性可以包含基本值、对象或者函数

简单点来说,JS中的对象就是指由若干键值对组成的无序数据类型的集合。一般用{...}来表示一个对象,用xxx : xxx的格式来申明变量以及赋值,并以,分隔开,最后一个键值对末尾不加,如下面的例子:

var animal = {    type: "animal",    age: null,    roar_sound: null,    roar: function(){        console.log(this.roar_sound);    }};animal.type;   //"animal"animal['type'];//"animal"animal.age;    //nullanimal['age']; //nullanimal.roar(); //null

这个例子创建了一个animal对象,我们可以用 animal.xxx 或者 animal['xxx']/animal["xxx"] 的方式来访问该对象的某一值。

PS:若属性名需要包含特殊字符串时,则需要用" "/' '括起来,并且只能通过xxx[‘xxx’]的方式来访问该对象,如:

var person = {'first-name' : 'Tom','second-name' : 'Riddle'}//仅能用以下方式访问对象person['first-name']; //"Tom"person['second-name'];//"Riddle"

给JS对象增加或删除属性:由于JS的对象是动态类型,所以我们可以自由的给对象增加或删除属性。

var person = {};person.name; //不存在,undefinedperson.name = "Tony";person.name; //"Tony"delete person.name; //不存在,undefined

判断一个属性是否存在于对象中:
我们可以使用in来判断一个属性是否存在于对象中,例如:

var person = {name : 'Tom Riddle'age : 'infinity'}'name' in person; //true'type' in person; //false

但是,通过这个方法来判别有个缺点,就是你无法知道这个属性是对象本身有的还是通过继承得到的。比如Person中有name属性,tony继承于person,于是tony也有了name属性,但这并不是他本身所自有的。

为了判断属性是否为对象所自有的,我们可以使用对象名.hasOwnProperty('属性名')的方法来判断:

var xiaoming = {    name: '小明'};xiaoming.hasOwnProperty('name'); // truexiaoming.hasOwnProperty('toString'); // false

注:总结于廖雪峰老师的教程,高程上的Object.defineProperty( ); 暂时没看出用途,等写到了再回来填坑。