zoukankan      html  css  js  c++  java
  • js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)

    1.工厂模式

    function a(name){
      var b = new object();
        b.name = name;
        b.say = function(){
            alert(this.name);
        }   
           return b    
    }

    函数内部产生b对象并返回。

    2.构造函数模式

    function Person(name, url) {    //注意构造函数名第一个字母大写
      this.name = name;
      this.url = url;
      this.alertUrl = alertUrl;
    }
     
    function alertUrl() {
      alert(this.url);
    }

    因为每构造一个对象就会生成一个alertUrl方法,这样太浪费资源空间,所以把alertUrl这个方法写在全局以节省空间,但这样写就违背了面向对象编程的初衷,下面的原型模式就更好一些。

    3.原型模式

    function Person(){  
    }
    
    Person.prototype.name = "bill";
    Person.prototype.address = "GuangZhou";
    Person.sayName = function (){
           alert(this.name);  
    }
    
    var person1 = new Person();
    var person2 = new Person();
     
    //测试代码
    alert(person1.name);   // bill
    alert(person2.name);    // bill
    person1.sayName();    //bill
    person2.sayName();    //bill
    
    person1.name = "666";
    
    alert(person1.name);   // 666
    alert(person2.name);    // bill
    person1.sayName();    //666
    person2.sayName();    //bill

      我们创建的每个函数都有prototype(原型)属性,这个属性其实是一个指针,指向一个对象。

      当构造一个person对象例如person1之后,它的默认name属性就是bill。如果要改name值的话就要对person1.name操作。这只是改了这个对象的name属性。alert(person1.prototype.name)依然是弹出bill,即原型上的name属性

    注:这只是本人学习的一些总结,如果有不对的地方还请各位大腿指正!

  • 相关阅读:
    数据结构与算法部分习题题解
    Codeforces Round #372 +#373 部分题解
    KMP算法的正确性证明及一个小优化
    后记
    BZOJ 4089:[Sdoi2015]graft(SDOI 2015 Round 2 Day 2)
    BZOJ 4085:[Sdoi2015]bigyration(SDOI 2015 round 2 Day 1)
    使用 async await 封装微信小程序HTTP请求
    mongo创建数据库和用户
    把实体bean对象转换成DBObject工具类
    Trident整合MongoDB
  • 原文地址:https://www.cnblogs.com/yonglin/p/6262896.html
Copyright © 2011-2022 走看看