1.object简单例子
<script type="text/javascript">
/*在js中并不存在类,所以可以直接通过Object来创建对象
* 但是这种方式最大的问题是:由于没有类的约束,无法实现对象的重复利用
并且没有一种约定,在操作时会带来问题
*/
var person=new Object();
person.name="leon";
person.age=33;
person.say=function(){
alert(this.name+","+this.age);
}
//person.say();
</script>
2.json对象
<script type="text/javascript">
/*json的意思:javascript Object Notation
*json就是js的对象,但是它省去了xml中标签,而是通过{}来完成对象的说明
*/
var person={
/*通过属性名:属性值来表示,不同的属性通过逗号间隔 */
name:"张三",
age:23,
say:function(){
alert(this.name+","+this.age);
}
//最后一个属性不需要逗号
}
//person.say();
/*通过json依然可以创建对象数组,创建方式和js的数组一样*/
var ps=[
{name:"leon",age:22},
{name:"Ada",age:33}
];
for(var i=0;i<ps.length;i++){
//alert(ps[i].name);
}
/*创建一组用户,用户的属性有
* name:String,age:int,friends:array
List<Person> ps=new ArrayList<Person>();
ps.add(new Person("Leon",22,["Ada","Alice"]));
ps.add(new Person("John",33,["Ada","Chirs"]));
把ps转换为json
*/
ps=[
{
name:"Leon",
age:22,
friends:["Ada","Alice"]
},
{
name:"John",
age:33,
friends:["Ada","Chirs"]
}
];
alert(ps[0].name);
</script>
3.factory
<script type="text/javascript">
/*通过工厂方式来创建Person对象,在createPerson创建一个对象,
*然后为这个对象设置相应的属性和方法,之后返回这个对象
*/
function createPerson(name,age){
var o=new Object();
o.name=name;
o.age=age;
o.say=function(){
alert(this.name+","+this.age);
}
return o;
}
var p1=createPerson("Leon",22);
var p2=createPerson("Ada",33);
//p1.say();
//p2.say();
//alert(typeof p1);//Object
/*使用工厂方式虽然解决了类的问题,但是依然存在一些问题
无法检测对象的数据类型,也无法使用instansceof检测 */
</script>
4.construct
<script type="text/javascript">
/*将行为设置为全局行为,如果将所有的方法都设置为全局的时候,这个函数
* 就可以被window调用,破坏了对象的封装性,如果某个对象有大量的方
法就会导致整个代码中充斥大量的全局函数,不利于开发
*/
function say(){
alert(this.name+","+this.age);
}
/*通过构造函数的方式创建,和基于工厂的创建类似
*最大的区别就是函数的名称就是类的名称,按照Java的约定,首字母大写
使用构造函数创建时,在函数内部通过this完成属性的定义
*/
function Person(name,age){
this.name=name;
this.age=age;
/* this.say=function(){
alert(this.name+","+this.age);
} */
this.say=say;
}
/*通过new Person来创建对象*/
var p1=new Person("Leon",22);
var p2=new Person("Ada",32);
//p1.say();p2.say();
/*使用构造函数的方式可以通过以下方式检测对象类型 */
//alert(p1 instanceof Person);
alert(p1.say==p2.say);
/*使用构造函数创建所带来的问题:
1.每一个对象中都会存在一个方法的拷贝,如果对象行为很多的话,占用大量内存,
可以将函数放到全局变量中定义,这样可以让类中的行为指向*/
</script>
转载于:https://my.oschina.net/686991/blog/363148