今天我们说一下JavaScript的对象!(ps别想歪了!;)
在现实生活中我们为每一种事物分了类,比如说人,动物,饮料,食物,建筑!而在JavaScript中我们把事物统一称为对象;像变量,数字,数组,函数;我们都可以称为对象;
我们看W3School中对于对象的定义是“JavaScript 中的所有事物都是对象:字符串、数值、数组、函数... ,此外,JavaScript 允许自定义对象。”那么我觉得我们可以这么认为,在JavaScript中对象可以分为两类:第一种也是我们用的最多的是语言本身提供的对象像 数组,函数 等;第二种就是我们自己创建的!
对象只是带有属性和方法的特殊数据类型。那么什么是对象的属性呢!我举一个小例子可以更快的理解:
金毛我们都很熟悉吧;我们把金毛看成我们的一个对象;那么这个对象有什么属性呢;第一个 name 如果没有一个独立的名字,那么我们的世界一定会很混乱的;第二个属性:长像特征 金毛那一身金色的毛发,每个人看起来心里都是一暖吧,在配上那种温柔的性格;那么金毛的方法是什么呢;首先;它会 旺旺·· 的叫,这个动作可以称为它的一个方法;其次它在你生气的时候可以逗你笑,这个动作也可以称为它的一个方法;现在心里应该对于属性与方法的概念区别出来了!
属性就是对于一个对象的描述,例如 length 长度,我们可以用这个关键字获取到一个Array的长度,或者一个Number的长度;
访问属性的代码写法是:objectName.propertyName 对象的名字.属性的名字;两个名字之间用点“.”来作为连接!
方法就是对于一个对象能做的什么操作,Number的toString() 可以把一个数字转换为一个字符串;(ps:简单的记忆区别就是:方法的后面都带有 小括号:“()”;)
调用对象方法的代码写法是:objectName.methodName()
与访问属性的方法一样也是用“.”来作为连接符;
JavaScript允许我们自己创建自己需要的对象:那么自己创建一个对象的代码写法是什么呢?看下面的代码演示:
//在写那个之前我们先写一下命名一个变量的完整写法 var a = new String(2); //但是这种写法太过于繁琐,现在都是直接: var a = 2; //命名一个数组的代码是: var arr = new Array[]; arr[0] = 'hello'; arr[1] = 'world'; //这样我们就写了一个数组;找到规律了吗?命名一个对象与他们类似: var dog = new Object(); dog.name = '金毛'; dog.age = 4; dog.say = function(){ return "I'm"+dog.name+"my year is"+dog.age+"old;" } //上面我创造了一个名字是dog 的新对象;我们可以访问它的属性: alert(dog.name); alert(dog.age); //调用它的方法: alert(dog.say());
我们前面说过的json方式写关联数组的方法其实说的并不是那么准确;json本身是对象的;并不是数组:
var json = {'name':'jack','age':20} //这是一个json 数组;我们查看下它的类型是什么;用到typeof这个关键字 alert(typeof json);
我们能看到弹出的是object 说明json本身是一个对象!
还有一种对象的创建方法叫做自定义够造对象;也可以称为构造函数:
function Dog(){ //构造函数的首字母是大写的 this.name = '金毛'; this.age = 5; this.say = function(){ return "I'm"+this.name+"my year is"+this.age+"old;" } } //为了能够让 say 中的函数能获取到Dog的里面的值 我用了this这个关键字; 上面我自定义了一个函数 也可以称为一个对象
但是当你去试着调用这个对象的时候却发现无法调用,这就涉及到一个对象实例化的问题;
什么是对象实例化呢;我们可以这样看待,我们自定义了一个新的对象,是在建造一座房子;而我们刚刚创造的那个自定义对象相当于这个房子的蓝图;我们想使用这个房子的话我们需要把这个图纸实现出来;实现出来的这个过程就叫做对象实例化;是不是觉得很难?其实很简单;看例子:
//我们现在要把上面的自定义对象实例化;具体代码是: var dog = new Dog(); //现在我们已经实例化完成;实例化的过程就是把我们上面写的自定义函数;new 给一个新的变量后就完成了; //下面我们可以调用这个函数的属性与方法了还是老规矩: alert(dog.name); alert(dog.age); alert(dog.say());