• js 中创建对象


    对象是什么

    从JavaScript定义上讲对象是无序属性的集合,其属性可以包含基本值、对象或函数。也就是说对象是一组没有特定顺序的属性,每个属性会映射到一个值上,是一组键值对,值可以是数据或对象。

    最简单的对象

    JavaScript的一对花括号{}就可以定义一个对象,这样的写法实际上和调用Object的构造函数一样

    var obj={};
    var obj2=new Object();
    

      

    这样构建出来的对象仅仅包含一个指向Object的prototype的指针,可以使用一些valueOf、hasQwnProperty等方法,没有多大实际作用,自定义对象嘛总要有一些自定义的属性、方法神马的。

    var obj={};
                obj.a=0;
                obj.fn=function(){
                    alert(this);
                }
                
                var obj2={
                    a:0,
                    fn:function(){
                        alert(this);
                    }
                }
    

      

    可以在定义完对象后通过”.”为其添加属性和方法,也可以使用字面量赋值方法在定义对象的时候为其添加属性和方法,这样创建的对象,其方法和属性可以直接使用对象引用,类似于类的静态变量和静态函数,这样创建对象有一个明显缺陷——在定义大量对象的时候很费力,要一遍遍的写几乎是重复的代码。

    抽象一下

    既然是重复代码就可以抽象出来,用函数来做这些重复工作,在创建对象的时候调用一个专门创建对象的方法,对于不同的属性值只需要传入不同参数即可。

    function createObj(a,fn){
                    var obj={};
                    obj.a=a;
                    obj.fn=fn;
                    return obj;
                }
                
                var obj=createObj(2,function(){
                    alert(this.a);
                });
    

      

    这里先定义o为一个空的对象,然后为o设置了一堆属性。其实也可以直接给o属性的嘛,所以如果这样写也是ok的。

    function createPerson(name,age,job){
        var o = {};
        o.name = name;
        o.age = age;
        o.job = job;
        o.sayName = function(){
         alert(this.name);
        };
        return o;
    }
    
    var tanya = createPerson("tanya","30","female");
    var ansel = createPerson("ansel","30","male");
    
    tanya.sayName();
    ansel.sayName();
    

      还有一种办法是利用无敌的this,因为this就表示当前运行时的对象,将构造函数this的作用域指向新对象,将当前运行对象的属性和方法都赋给新对象,这样对象模式称为构造函数模式

    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = function(){
         alert(this.name);
        };
    }
    
    var tanya = new Person("tanya","30","female");
    var ansel =  new Person("ansel","30","male");
    
    tanya.sayName();
    ansel.sayName();
    

      

  • 相关阅读:
    面向对象程序设计(三)
    面向对象程序设计(二)
    Class.forName()方法抛出异常
    Android Developer -- Bluetooth篇 开发实例之二 连接设备
    Android Developer -- Bluetooth篇 开发实例之一 扫描设备
    Android Developer -- Bluetooth篇 概述
    Android的数据存储方式概述
    Android 更新UI的两种方法——handler和runOnUiThread()
    Android UI 常用图标尺寸规范
    Android单个控件占父控件宽度一半且水平居中
  • 原文地址:https://www.cnblogs.com/kevin2016/p/5821513.html
Copyright © 2020-2023  润新知