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属性

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

  • 相关阅读:
    小明系列问题——小明序列
    Multiplication Table
    DZY Loves Colors
    Points
    Tree
    img标签中alt属性与title属性在seo的作用-摘自网友
    如何合理命名CSS文件——摘自网友
    <meta http-equiv="X-UA-Compatible" content="IE=7" />
    英语
    10个CSS简写/优化技巧-摘自网友
  • 原文地址:https://www.cnblogs.com/yonglin/p/6262896.html
Copyright © 2011-2022 走看看