带有属性和方法的特殊数据类型,而每一个属性或者方法又可看作是一个键值对,所以能够这样定义:对象是一系列无序键值对的集合javascript
你本身建立的对象html
1 对象初始化器,这种方式最为简单暴力,直接一系列明显的键值对集合。java
var obj={ name:'PengL', age:100, func:function() { alert("I am "+obj.name+" and I am "+obj.age); } };
2 构造函数数组
function person(name,age){ this.name=name; this.age=age; this.func=func; function func() { alert("I am "+this.name+" and I am "+this.age); } } var obj=new person("PengL",100);
说明:第一种方法是直接建立的一个对象的实例,第二种是经过new构造函数的方式来建立一个对象,而且传入不一样的参数,这样对象对应的属性值就不同。不过要注意的是不要忘了new,否则就是把一个普通函数赋给了obj,而且这时的this指向也是混乱的了。关于this指向的问题能够参考一下做者的另外一篇博客javascript进阶之this函数
通常在真实的项目中上面demo的写法实际上是不合理的。最好的方式是原型和构造函数混用的方式来作,好比上面的能够改为这样this
function person(name,age) { this.name=name; this.age=age; } person.prototype.func=function(){ alert("I am "+this.name+" and I am "+this.age); };
这种方式不只结构清楚,最重要的是还节约了内存,在对象的原型上建立的方法,那么这个方法就是经过该构造函数所建立的全部对象共有的方法了。各个对象有本身独有的name,age属性,有共有的func方法。若是有对原型不熟悉的同窗能够看看这篇廖雪峰大神的做品廖雪峰prototype