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

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

  • 相关阅读:
    mongodb 的安装历程
    从C的声明符到Objective-C的Blocks语法
    #译# Core Data概述 (转)
    避免在block中循环引用(Retain Cycle in Block)
    GCD和信号量
    Blocks的申明调用与Queue当做锁的用法
    [译]在IB中实现自动布局
    清理Xcode的技巧和方法
    SVN的Status字段含义
    iOS应用崩溃日志揭秘2
  • 原文地址:https://www.cnblogs.com/yonglin/p/6262896.html
Copyright © 2011-2022 走看看