• JS笔记2 --定义对象


    16.javascript中定义对象的几种方式(javascript中没有类的概念,只有对象):

    1)基于已有对象扩充其属性和方法:

    var object = new Object();
    object.name
    = "zhangsan";
    object.sayName
    = function(name){
      
    this.name = name;
      alert(
    this.name);
    }
    object.sayName(
    "lisi");

    2)工厂方式:

    //工厂方式创建对象
    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 object1 = createObject("zhangsan","123");
    
    var object2 = createObject("lisi","456");
    
    object1.get();
    
    object2.get();

    3)构造函数方式:

    function Person(){
    
      //在执行第一行代码前,js引擎会为我们生成一个对象
    
      object.username = "zhangsan";
    
      object.password = "123";
    
      object.getInfo = function(){
    
        alert(this.username + ", " + this.password);
    
      }
    
      //此处有一个隐藏的return语句,用于将之前生成的对象返回
    
    }
    
    var person = new Person();
    
    person.getInfo();
    
    
    
    //可以在构造对象时传递参数
    
    function Person(username,password){
    
      //在执行第一行代码前,js引擎会为我们生成一个对象
    
      object.username = username;
    
      object.password = password;
    
      object.getInfo = function(){
    
        alert(this.username + ", " + this.password);
    
      }
    
      //此处有一个隐藏的return语句,用于将之前生成的对象返回
    
    }
    
    var person = new Person("zhangsan","123");
    
    person.getInfo();

    4)原型 ("prototype")方式:

    //使用原型 (prototype)方式创建对象
    
    function Person(){
    
    }
    
    Person.prototype.username = "zhangsan";
    
    Person.prototype.password= "123";
    
    Person.prototype.getInfo = function(){
    
      alert(this.username + ", " + this.password);
    }
    
    var person1 = new Person();
    
    var person2 = new Person();
    
    person1.username = "lisi";
    
    person1.getInfo();
    
    person2.getInfo();
    
    
    
    //
    function Person(){
    
    }
    
    Person.prototype.username = new Array();
    
    Person.prototype.password= "123";
    
    Person.prototype.getInfo = function(){
    
      alert(this.username + ", " + this.password);
    
    }
    
    var person1 = new Person();
    
    var person2 = new Person();
    
    person1.username.push("zhangsan");
    
    person1.username.push("lisi");
    
    person1.password= "456";
    
    person1.getInfo();
    
    person2.getInfo();
    
    
    
    //使用原型 + 构造函数方式来定义对象
    
    function Person(){
    
      this.username = new Array();
    
      this.password= "123";
    
    }
    
    Person.prototype.getInfo = function(){
    
      alert(this.username + ", " + this.password);
    
    }
    
    var person1 = new Person();
    
    var person2 = new Person();
    
    person1.username.push("zhangsan");
    
    person2.username.push("lisi");
    
    person1.getInfo();
    
    person2.getInfo();

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

    function Person(){ 
    
      this.username = new Array();
    
      this.password= "123";
    
      if(typeof Person.flag == "undefined"){
    
        alert("invoked");  
    
        Person.prototype.getInfo = function(){
    
          alert(this.username + ", " + this.password);
    
        }
    
        Person.flag = true;
      }
    
    }
    
    var person1 = new Person();
    
    var person2 = new Person();
    
    person1.getInfo();
    
    person2.getInfo();
    水袂分处,劳劳新亭;春风过耳,呦呦鹿鸣。 折柳为君,清余在心;人间流往,水墨无痕。 悠然来矣,思然去矣;片花飞融,时不在矣……
  • 相关阅读:
    Linux下Rootkit的另类检测
    用iptables抗御SYN Flood攻击
    用iptables抗御SYN Flood攻击
    突破极限 解决大硬盘上安装Sco Unix新思路
    突破极限 解决大硬盘上安装Sco Unix新思路
    安装、配置Vmware Esx Server 3.5视频全过程
    安装、配置Vmware Esx Server 3.5视频全过程
    应该如何对企业局域网性能传输进行测试分析
    Leetcode-944 Delete Columns to Make Sorted(删除列以使之有序)
    Leetcode-941 Valid Mountain Array(有效的山脉数组)
  • 原文地址:https://www.cnblogs.com/zhengsha/p/5086455.html
Copyright © 2020-2023  润新知