zoukankan      html  css  js  c++  java
  • 《JS设计模式笔记》构造函数和工厂模式创建对象

    工厂模式

     1 function createPerson (name,age,job) {
     2           var o=new Object();
     3           o.name=name;
     4           o.age=age;
     5           o.job=job;
     6           o.sayName=function(){
     7               alert(this.name);
     8           };
     9           return o;
    10       }; 
    11       var person1=createPerson("Terry",24,"Software Engineer");
    12       person1.sayName();
    13       var Person2=createPerson("Terry2",24,"Software Engineer2");
    14       person2.sayName();

    构造函数模式

     1  function Person(name,age,job){
     2           this.name=name;
     3           this.age=age;
     4           this.job=job;
     5           this.sayName=function(){
     6               alert(this.name);
     7           }
     8       }
     9       var person1=new Person("Terry",23,"Engineer Software");
    10       person1.sayName();

      person1对象有一个constructor属性,该属性指向Person,constuctor属性最初是用来标识对象类型的。但是 instanceof操作符要更可靠一些。

    1 alert(person1 instanceof Object);//ture
    2 alert(person1 instanceof Person);//ture

      自定义构造函数意味着将来可以将它的实例标识为一种特定的类型,这正是构造函数模式胜过工厂模式的地方。
      构造函数也是函数,任何函数只要通过new操作符来调用,那它就可以做为构造函数;而任何函数不通过new操作符来调用,那它跟普通函数也不会有什么两样。

    1、当做构造函数来使用

    1 var person=new Person("Terry",23,"Software Engineer");
    2 person.sayName();

    2、作为普通函数来调用

    1 Person("Terry",25,"Doctor");
    2 window.sayName();

    3,在另一对象作用域中调用

    1 var o=new Object();
    2 Person.call(o,"Terry",23,"Nurse");
    3 o.sayName();

      当在全局作用域中调用一个函数时, this对象总是指向Global对象(在浏览器中就是window对象)。

      因此,在调用完函数之后,可以通过window对象来调用sayName()方法,并且还返回了"Terry"。

      最后,也可以使用 call()(或者 apply())在某个特殊对象的作用域中调用 Person()函数。

      这里是在对象o的作用域中调用的,因此调用后 o 就拥有了所有属性和 sayName()方法。

    构造函数的问题

      ...

      ...

  • 相关阅读:
    web前端的发展态势
    AngularJs 简单入门
    css代码优化篇
    git提交报错:Please make sure you have the correct access rights and the repository exists.
    Activiti工作流框架学习
    遍历map集合的4种方法
    js设置日期、月份增加减少
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    webservice_rest接口_学习笔记
    相互匹配两个list集合+动态匹配${}参数
  • 原文地址:https://www.cnblogs.com/lvyongbo/p/4729792.html
Copyright © 2011-2022 走看看