zoukankan      html  css  js  c++  java
  • 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();
    

      

  • 相关阅读:
    在 Students 的 Index 页面增加列标题链接(排序),分页,过滤和分组功能
    Contoso 大学
    如何搭建MVC + EF 框架
    EF与手写Model的区别以及联系
    報錯:One or more validation errors were detected during model generation:System.Data.Edm.EdmEntityType: : EntityType 'Movie' has no key
    Oracle四舍五入,向上取整,向下取整
    datagrid中设置编辑,删除列是否可以访问
    datagrid中设置编辑,删除列是否可以访问
    C#实现打印
    C#中rpt的数据类型和Oracle中数据类型的匹配
  • 原文地址:https://www.cnblogs.com/kevin2016/p/5821513.html
Copyright © 2011-2022 走看看