zoukankan      html  css  js  c++  java
  • JavaScript之Object

    两种简单的JavaScript中定义对象的方式:

    在JavaScript中,可以动态添加对象的属性,也可以动态删除对象的属性。

    1 var object=new object();
    2 //alert(object.username);
    3 object["username"]="zhangsan";
    4 alert(object.username);
    5 delete object.username; //username已经从object对象中删除
    6 alert(object.username);

    在JavaScript中定义对象最常用的方式:

    1 var object ={username:"zhangsan",password:123};

    JavaScript中定义对象的几种方式(JavaScript中没有类的概念,只有对象):
    1) 基于已有对象扩充其属性和方法:

     1 var object = new Object();
     2 
     3 object.name = "zhangsan";
     4 object.sayName = function(name)
     5 {
     6     this.name = name;
     7     alert(this.name);
     8 }
     9 
    10 object.sayName("lisi");

    2)工厂方式:

    为了使的一个函数对象被多个对象所共享,而不是每一个对象拥有一个函数对象,应该讲对象的成员函数定义在createObject(username, password)之外来调用,而不是将函数放在工厂方法之内。

     1 //使用工厂方法创建对象
     2 function get()
     3 {
     4     alert(this.username + ", " + this.password);
     5 }
     6 
     7 function createObject(username, password)
     8 {
     9     var object = new Object();
    10 
    11     object.username = username;
    12     object.password = password;
    13 
    14     object.get = get;
    15 
    16     return object;
    17 }
    18 
    19 var object = createObject("zhangsan", "123");
    20 var object2 = createObject("lisi", "456");
    21 
    22 object.get();
    23 object2.get();

    3) 构造函数方式:

     1 function Person()
     2 {
     3     //在执行第一行代码前,js引擎会为我们生成一个对象
     4     this.username = "zhangsan";
     5     this.password = "123";
     6 
     7     this.getInfo = function()
     8     {
     9         alert(this.username + ", " + this.password);
    10     }
    11 
    12     //此处有一个隐藏的return语句,用于将之前生成的对象返回
    13 }
    14 
    15 var person = new Person();
    16 person.getInfo();

    可以在构造对象时传递参数

     1 function Person(username, password)
     2 {
     3     this.username = username;
     4     this.password = password;
     5 
     6     this.getInfo = function()
     7     {
     8         alert(this.username + ", " + this.password);
     9     }
    10 }
    11 
    12 var person = new Person("zhangsan", "123");
    13 person.getInfo();

    4)原型(“prototype”)方式:

    单纯的使用原型方式来创建对象,那么生成的所有对象会共享原型中的属性,这样一个对象改变了该属性也会反应到其他对象当中。同时,对象无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。

     1 function Person()
     2 {
     3 
     4 }
     5 
     6 Person.prototype.username = new Array();
     7 Person.prototype.password = "123";
     8 
     9 Person.prototype.getInfo = function()
    10 {
    11     alert(this.username + ", " + this.password);
    12 }
    13 
    14 var person = new Person();
    15 var person2 = new Person();
    16 
    17 person.username.push("zhangsan");
    18 person.username.push("lisi");
    19 person.password = "456";
    20 
    21 person.getInfo();
    22 person2.getInfo();

    使用原型+构造函数方式来定义对象则可以解决这些问题:

     1 //使用原型+构造函数方式来定义对象
     2 
     3 function Person()
     4 {
     5     this.username = new Array();
     6     this.password = "123";
     7 }
     8 
     9 Person.prototype.getInfo = function()
    10 {
    11     alert(this.username + ", " + this.password);
    12 }
    13 
    14 var p = new Person();
    15 var p2 = new Person();
    16 
    17 p.username.push("zhangsan");
    18 p2.username.push("lisi");
    19 
    20 p.getInfo();
    21 p2.getInfo();

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

     1 function Person()
     2 {
     3     this.username = "zhangsan";
     4     this.password = "123";
     5 
     6     if(typeof Person.flag == "undefined")
     7     {
     8         alert("invoked");
     9         
    10         Person.prototype.getInfo = function()
    11         {
    12             alert(this.username + ", " + this.password);
    13         }
    14 
    15         Person.flag = true;
    16     }
    17 }
    18 
    19 var p = new Person();
    20 var p2 = new Person();
  • 相关阅读:
    AppScan扫描教程
    iis发布网站可能遇到的问题及解决方法
    apache、nginx、iis日志记录的各个字段内容与含义
    nmap的使用教程
    ubuntu下编译wiringPi
    配置NAT
    华为OSPF与ACL综合应用实例讲解
    浮动静态路由及负载均衡
    静态路由及默认路由基本配置
    利用三层交换机实现VLAN间路由
  • 原文地址:https://www.cnblogs.com/daneres/p/4787524.html
Copyright © 2011-2022 走看看