• 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();
  • 相关阅读:
    直击微软第九频道著名主持Robert Green 对话一站式示例代码库大老板梁梅女士
    微软发布中文版一站式示例代码浏览器
    每日一例,练就编程高手
    微软发布Visual Studio 2012 示例代码浏览器
    微软发布Sample Browser for Windows 8版:5000示例代码,"触手可及"
    arthas使用总结
    前端如何生成二维码
    golang的helloworld以及nonmain package的troubleshooting
    监控文件的网页工具
    postfix + courierimap + squirrelMail 邮件服务器
  • 原文地址:https://www.cnblogs.com/daneres/p/4787524.html
Copyright © 2020-2023  润新知