zoukankan      html  css  js  c++  java
  • js:面向对象编程

    ----- javasrcipt中没有类的概念,面向对象的一切都需操作对象。

    ----- js中所有的对象都是就Object延伸而来。

    一,以下是创建对象的几种方法

    1,使用Object定义对像的属性与方法

    这种方法操作对像的缺点在于,如果要生成多个需要使用同样的语法创建对象

    有以下几种方式:

    var obj=new Object();
    obj.username="zxd";
    obj.password="123";
    obj.test=function(){
                 alert(this.username+""+this.password);          
    }
    var obj=new Object();
    obj["username"]="张三";
    obj["password"]="123";
    obj["test"]=function(){};
    var obj={
    username:"张三",
    password:"123",
    test":function(){
         }
    };

    2,通过工厂方式配合单独函数创建对象

    这种方式定义解决了之前的所有问题,但是这种创建对象的方式使得在创建对象的过程中函数与属性分开了,使得代码不太好管理。

    function test(){
              alert(this.username+""+this.password);  
    }
    function createObj(username,password){
               var obj=new Object();
               obj.username=username;
               obj.password=password;
               obj.test=test;
               return obj;  
    }
    var obj=createObj("abc","abc");
          obj.test();

    3,构造函数的方式创建对象

    通过构造函数的方式创建对象,的优点在于不在需要Object,也不需要reutrn返回,实际上构造函数的方式创建对象,在函数中会隐含一个return来返回对象。

    缺点:但是使用构造函数创建对象与之前工厂模式一样,也存在着重复创建函数的问题,当然也可以像之前一样把函数定义在外部。

    function person(username,password){
            this.username=username;
            this.password=password;
            this.get=function(){
                    alert(this.username+""+this.password);
            }  
    }
    var obj1=new person("asd","123");
    var obj2=new person("dsa","353");
    
    obj.get();
    obj.get();

    4,原型方式创建对象

    function person(){
    
    }
    person.prototype.username=new Array("aad","ada");
    person.prototype.passwrod="123";
    person.priototype.test=function(){
        alert(this.username+""+this.password);
    }
    var obj1=new person();
    var obj2=new person();
    obj1.username.push("three");
    obj1.test();
    obj2.test();

    5,构造函数与原型混合使用创建对象

    这种方式解决了构造函数与原型方式的不足,是比较理想的一种创建对象的方式。

    function person(username,pasword){
          this.uername=username;
          this.password=password;
      
    }
    person.prototype.get=function(){
          alert(this.username+""+this.password);
    }
    var obj1=new person("aa","232");
    var obj2=new person("ddd","343");
    obj1.get();
    obj2.get();
  • 相关阅读:
    HUSTOJ:Transit Tree Path
    HUSTOJ:5500 && 洛谷:P1412:经营与开发
    hdu:2036.改革春风吹满地
    hdu:2030.汉字统计
    Leetcode:338. Bit位计数
    【学习笔记】圆方树(CF487E Tourists)
    BZOJ3238 [Ahoi2013]差异
    CF 187D BRT Contract
    CF 36E Two Paths
    CF 49E Common ancestor
  • 原文地址:https://www.cnblogs.com/dybe/p/8075867.html
Copyright © 2011-2022 走看看