zoukankan      html  css  js  c++  java
  • JS定义类及对象

    1.工厂方式

    <script type="text/javascript"> 
    
    function createObject(name){ 
    
           var p = new Object(); 
    
           p.name=name; 
    
           p.say = function(){alert(p.name+'ff');} 
    
           return p; 
    
    } 
    
    var p1 = createObject("p1"); 
    
    var p2 = createObject("p2"); 
    
    alert(p1.name+" "+p2.name); 
    
    p1.say();p2.say(); 
    
    alert(p1.say==p2.say); //false 
    
    </script>

    问题:每创建一个对象,对象的方法是新对象,浪费资源

    2.构造函数方式

    <script type="text/javascript"> 
    
    function Person(name){ 
    
    this.name = name; 
    
    this.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); //false 
    
    </script>

    问题:创建对象时比工厂方法更于理解。和工厂方法一样,每个对象都有自己的方法,浪费资源.

    3.原型方式

    function Person(){}
    
    Person.prototype.name="";
    
    Person.prototype.say=function(){
        alert("I am"+this.name);
    
    }
    
    var p1=new Person();
    
    var p2=new Person();
    
    alert(p1.say==p2.say);//true

    问题:无法在构造方法中传递参数,所有对象共享属性。

    优点:对象共用方法,节约资源的。

    4.构造方法+原型方式

    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);//true

    优点:解决了前面提到的问题

    问题:封装不够完美。

    5。动态原型方式

    function Person(name){
       this.name=name;
    
      if(Person.prototype.say==undefined){
            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);//true

    结论:一种完美的解决方案。

    6.对象的创建--JSON

    var person={};
    
    var girl={
    
         name:"miss wang",
    
         age:20,
    
         show=function(){
              alert("my name is "+this.name);
    
         }
    
    }
  • 相关阅读:
    分布式session管理解决方案
    RabbitMQ知识汇总
    RabbitMQ之集群模式总结
    Flexbox参数详解
    CSS Lint
    javascript中的defer属性和async属性
    简介BFC
    GIT 牛刀小试 (第二发)
    GIT 牛刀小试 (第一发)
    如何让浏览器支持HTML5标签
  • 原文地址:https://www.cnblogs.com/huaxingtianxia/p/5589984.html
Copyright © 2011-2022 走看看