zoukankan      html  css  js  c++  java
  • js高级(类和对象)


    1.工厂方式
    工厂方式是指创建一个返回特定对象类型的工厂函数
    eg.
      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();
    但是问题也来了,就是每创建一个对象,对象的方法是新对象,很浪费资源;

    2.构造函数方式

    方法类似:
    eg.
      function Car(sColor,iDoors,iMpg){
        this.color=sColor;
        this.doors=iDoors;
        this.mpg=iMpg;
        this.showColor=function(){
          alert(this.color);
        }
      }
      var oCar1=new Car("red",4,23);
      var oCar2=new Car("blue",3,25);
    它的问题与上面一样;

    3、原型方式
    该方式利用了对象的prototype属性,可把它看成创建新对象所依赖的原型。

    eg.
      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.getInfo();

      person2.getInfo();

    使用原型的缺点:

      1.不能传参数;

      2.所有对象共享属性,有可能会导致程序错误。

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

      单纯使用原型方式定义对象无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。

    4.混合的构造函数/原型方式
    eg.
      function Person(name){
        this.name = name;
      }
      Person.prototype.say = function(){
        alert("I am "+this.name);
      }
      var p1 = new Person("wang");
      var p2 = new Person("li");
      p1.say();
      p2.say();
      alert(p1.say==p2.say); 
    5、动态原形方式
    在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。
    eg.

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

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

          Person.flag = true;

        }
      }

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

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

    对象之间的属性互不干扰,各个对象间共享同一个方法.

  • 相关阅读:
    js阻止事件冒泡和标签默认行为
    Sql server不同数据类型间拼接(+)
    win7 激活相关
    查找算法
    算法基础
    requests库使用
    python urllib和urllib3包使用
    爬虫工具fiddle在firefox浏览器中的使用
    爬虫抓包工具Fiddle设置
    爬虫抓包工具Charles设置
  • 原文地址:https://www.cnblogs.com/p719027365/p/4117515.html
Copyright © 2011-2022 走看看