javascript09-object01

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值