Javascript的对象

来源:互联网 发布:mac谜案处by虎喵喵 编辑:程序博客网 时间:2024/06/06 03:17

    • 创建对象
    • 对象字面量对象的属性存储
    • 对象属性的查找与检索
    • 对象属性的更新
    • 对象的委托
    • 属性的枚举
    • 全局命名空间
    • 对象的方法


Javascript是一门很灵活多变的语言,也是一门面向对象的语言。在JS的世界里,有“函数是一等公民”“一切皆对象”的说法。

在JS里,对象指的是可变的键控集合。Javascript里有Number,Array,Function,Object,Boolean,Regex,String,Undefined,Null九种类型。在这里面,Array,Function,Object,Regex是对象。

对象是无类型的,并且可以嵌套。对象所包含的是一组名值对的集合,这里的“名”也称作属性,“值”又称作属性值。

那么,我们如何创建一个对象呢?我们该如何使用对象呢?现在我们来一一解答


创建对象

关于如何创建一个对象,一般熟悉Javascript的人能够回答上来两种方法:

第一种:

var newObj = new Object();

第二种:

var newObj = {};

但是,Javascript还为我们提供了第三种创建对象的方法,那就是Object.create()方法:

var newObj = Object.create({});

对象字面量(对象的属性存储)

在Javascript的对象里,我们采用对象字面量的方式来存储名值对到对象里:

var newObj = {    key1: 'value1',   //如果值是String类型必须用引号包含    key2: 123     //如果值是Number类型,那么不用引号};

当然,我们属性名和属性值的格式也可以采用JSON的格式:

var newObj = {    "key1": "value1",    "key2": 123};

关于属性名的格式,如果属性名里包含了短横线,那么,属性名必须使用引号包含,但是,如果是包含的下划线,那么,可以不使用引号包含,比如:

var newObject = {    key1_name: 'name1',    'key2-name': 'name2'};

对象是可以嵌套的:

var newObj = {    name: 'Erichain',    info: {        sex: male,        age: 21    }};

对象的属性值可以是任意的数据类型:

var newObj = {    newStr: 'this is a string', //String    newNumber: 123, //Number    newBoolean: true, //Boolean    newArray: [1, 2, 3], //Array    newFunction: function () {} //Function    //and so on...};

对象属性的查找与检索

与其它的语言(比如Java,C等)类似,Javascript里的属性查找可以使用小数点的方式:

var newObj = {    name: 'Erichain',    age: 21};console.log(newObj.name);>> Erichain

也可以使用[属性名]的方式:

var newObj = {    name: 'Erichain',    age: 21};console.log(newObj['name']);>> Erichain

同样的,使用小数点的方式访问属性的时候,属性名不能是数字,或者包含有各种符号的。如果有包含符号的属性名,就只能使用[属性名]的方式访问属性。一般优先考虑使用小数点访问的方式。

如果尝试去访问一个不存在的属性的话,将会返回undefined

var newObj = {    name: 'Erichain',    age: 21};console.log(newObj.girlfriend);>> undefined  //够形象了吧

对象属性的更新

Javascript的对象的属性值是可以实时更新的。属性的个数也可以随时进行添加。

var newObj = {    name: 'Erichain',    age: 21};console.log(newObj.name);>> Erichain//更新属性值newObj.name = 'Zain';console.log(newObj.name);>> Zain//添加新属性newObj.girlfriend = true;console.log(newObj);>> newObj = {    name: 'Zain',    age: 21,    girlfriend: true};

有了属性的添加,肯定就会有属性的删除。我们使用delete来对对象的属性进行删除:

var newObj = {    name: 'Erichain',    age: 21};console.log(newObj.name);>> Erichaindelete newObj.name;console.log(newObj.name);>> undefined

对象的委托

Javascript的对象都会有一个叫做prototype的属性,所有的对象的prototype都是Object。当我们访问对象的属性值的时候,对象会首先在本对象里面寻找,如果找不到,那么就会到prototype里面去找,这个寻找的过程就称作委托。

我们可以看一个例子来理解:

var newObj = {    name: 'Erichain',    age: 21};newObj.prototype.getAge = function () {    return this.age;};console.log(newObj.getAge());>> 21

我们没有在newObj里面定义getAge()方法,但是,我们在它的原型上定义了这个方法,所以,它在本地找不到的时候,会去原型上查找这个方法。这就是委托的过程。


属性的枚举

想要枚举Javascript对象的属性,我们可以使用for in方法,也可以使用for循环,其中,for in不会按照属性的顺序来进行枚举:

var newObj = {    name: 'Erichain',    age: 21};//使用for infor( var name in obj ) {    console.log(obj[name] + '\n');}//使用for循环//首先,定义一个数组,来存放相关的属性名var keyName = ['name', 'age'];for( var i = 0; i < newObj.length; i++ ) {    console.log(keyName[i] + ':' + newObj[keyName[i]] + '\n');}

全局命名空间

关于Javascript的全局命名空间,我们为了不污染这个空间,一般是在一个js文件里,我们定一个对象,将其他的方法等,都写在这个对象里面:

var namespace = {};namespace.initial = function () {};namespace.getSomeValue = function () {};//and so on...

对象的方法

关于对象的方法,我在这里只简单的介绍一个,就是hasOwnProperty,用来判断一个对象是否含有某个属性:

var newObj = {    name: 'Erichain',    age: 21};console.log(newObj.hasOwnProperty('name'));>> trueconsole.log(newObj.hasOwnProperty('girlfriend'));>> false

关于Javascript的对象,要说的话,十篇博文都说不完,这里,是我个人总结了一些常用的东西。如果想要深入学习,大家可以找我互相交流。

1 0