• javascript的自定义对象


    在JavaScript中,函数(function)就是对象。 在JavaScript中,没有方法(函数)重载的概念

    在JavaScript中有一个Function对象,所有自定义的函数都是Function对象类型的。Function对象接收的所有参数都是 字符串类型的,其中最后一个参数就是要执行的函数体,而前面的参数则是函数真正需要接收的参数。当你用var oo=new Function("xx","xx");alert(typeof oo);则弹出的是function,如果用function add(){},用alert(typeof add)弹出的是function

    在JavaScript中,每个函数都有一个隐含的对象arguments,表示给函数实际传递的参数。

    arguments是类似于数组的东西,可以用他来模拟方法的重载.(javascript中是没有函数重载的)

    <script type="text/javascript">
       
      function add(number1, number2)
      {
       alert(arguments.length);   
       alert(arguments[0]);
       alert(arguments[1]);
       alert(arguments[2]);
      } 

      //add(2, 3, 4);

      
      function add2()
      {
       if(1 == arguments.length)
       {
        alert(arguments[0]);
       }
       else if(2 == arguments.length)
       {
        alert(arguments[0] + arguments[1]);
       }
       else if(3 == arguments.length)
       {
        alert(arguments[0] + arguments[1] + arguments[2]);
       }
      }

      add2(3);
      add2(3, 4);
      add2(3, 4, 5);
      </script>

    每一个函数对象都有一个length属性,表示该函数期望接收的参数格式。它与函数的arguments不同,arguments.length表示函数实际接收的参数格式。

    function add(num1,num2)这里的参数仅仅是你期望他能接收多少个参数,实际上调用时你传递的参数个数可以跟他不一样的.

    <script type="text/javascript">
      
      var add = function(num, num2, num3)
      {
       alert(num + num2 + num3);
      } 
      alert(add.length);
      add(1, 2, 3);

      var add2 = function()
      {
       
      }

      alert(add2.length);
      
      </script>

    在JavaScript,所有对象都是从Object对象继承过来的。Object中的属性是不可枚举的(propertyIsEnumerable返回false),因此无法
    通过for…in语句得到其中的属性。

    javascript中定义对象的方式:

    1.在JavaScript中,可以动态添加对象的属性,也可以动态删除对象的属性。先new好对象,然后再给其增加属性

     var object = new Object();
      //alert(object.username);

      object["username"] = "shengsiyuan";

      object.sayHello=function (username){

          this.username=username;

          alert(this.username);

      }

      alert(object.username);

      delete object.username; // username属性已经从object对象中删除

      alert(object.username);

    2.在JavaScript中定义对象的第二种方式:最常用

     // 在JavaScript中定义对象的最常见的方式
      var object = {username: "zhangsan", password: 123};

      alert(object.username);
      alert(object.password);

    3.工厂方式

    function createObject()
    {
     var object = new Object();

     object.username = "zhangsan";
     object.password = "123";

     object.get = function()
     {
      alert(this.username + ", " + this.password);
     }

     return object;
    }

    var object1 = createObject();
    var object2 = createObject();

    object1.get();

    带上参数:

    function createObject(username, password)
    {
     var object = new Object();

     object.username = username;
     object.password = password;

     object.get = function()
     {
      alert(this.username + ", " + this.password);
     }

     return object;
    }

    var object1 = createObject("zhangsan", "123");
    object1.get();

    让一个函数对象被多个对象所共享,而不是每一个对象拥有一个函数对象。

    function get()
    {
     alert(this.username + ", " + this.password);
    }

    function createObject(username, password)
    {
     var object = new Object();

     object.username = username;
     object.password = password;

     object.get = get;

     return object;
    }

    var object = createObject("zhangsan", "123");
    var object2 = createObject("lisi", "456");

    object.get();
    object2.get();

    4.构造函数方式

    function Person()
    {
        //在执行第一行代码前,js引擎会为我们生成一个对象
     this.username = "zhangsan";
     this.password = "123";

     this.getInfo = function()
     {
      alert(this.username + ", " + this.password);
     }

     //此处有一个隐藏的return语句,用于将之前生成的对象返回
    }
    可以在构造对象时传递参数

    function Person(username, password)
    {
     this.username = username;
     this.password = password;

     this.getInfo = function()
     {
      alert(this.username + ", " + this.password);
     }
    }

    var person = new Person("zhangsan", "123");
    person.getInfo();
    5.原型(“prototype”)方式

    如果使用原型方式对象,那么生成的所有对象会共享原型中的属性,这样一个对象改变了该属性也会反应到其他对象当中。

    //使用原型(prototype)方式创建对象
    function Person()
    {

    }

    Person.prototype.username = "zhangsan";
    Person.prototype.password = "123";

    Person.prototype.getInfo = function()
    {
     alert(this.username + ", " + this.password);
    }

    var person = new Person();
    var person2 = new Person();

    person.username = "lisi";//这个是字符串常量,他的改变不会影响到另外一个对象的属性

    person.getInfo();
    person2.getInfo();

    下面的一种会影响:

    function Person()
    {

    }

    Person.prototype.username = new Array();
    Person.prototype.password = "123";

    Person.prototype.getInfo = function()
    {
     alert(this.username + ", " + this.password);
    }

    var person = new Person();
    var person2 = new Person();

    person.username.push("zhangsan");
    person.username.push("lisi");
    person.password = "456";

    person.getInfo();
    person2.getInfo();

    单纯使用原型方式定义对象无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。
    使用原型+构造函数方式来定义对象,对象之间的属性互不干扰,各个对象间共享同一个方法

    //使用原型+构造函数方式来定义对象

    function Person()
    {
     this.username = new Array();
     this.password = "123";
    }

    Person.prototype.getInfo = function()
    {
     alert(this.username + ", " + this.password);
    }

    var p = new Person();
    var p2 = new Person();

    p.username.push("zhangsan");
    p2.username.push("lisi");

    p.getInfo();
    p2.getInfo();

    6.动态原型方式:在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。

    function Person()
    {
     this.username = "zhangsan";
     this.password = "123";

     if(typeof Person.flag == "undefined")
     {
      alert("invoked");
      
      Person.prototype.getInfo = function()
      {
       alert(this.username + ", " + this.password);
      }

      Person.flag = true;//这个是随便定义都可以的,只要不是undefined即可
     }
    }

    var p = new Person();
    var p2 = new Person();

    p.getInfo();
    p2.getInfo();

  • 相关阅读:
    Ubuntu20.04本地安装Redash中文版
    ubuntu设置root密码
    qmake设置生成文件分类
    QML对象的构造函数和析构函数
    QString使用split按照某字符进行分解
    Qt的qDebug直接打印不添加头文件
    C++宏定义中的#
    Qt设置生成的文件路径
    QWidget禁止最大化
    js-去掉回车和空格
  • 原文地址:https://www.cnblogs.com/qiuh/p/3039816.html
Copyright © 2020-2023  润新知