zoukankan      html  css  js  c++  java
  • JS === 面向对象 总结

    创建对象

    1.工厂模式

      function createPerson(name,age,job){

        var o = new Object();

        o.name = name;

        o.age = age;

        o.job = job;

        o.sayName = function(){

        alert(this.name);

      };

      return o;

      }

    var person1 = createPerson("Emily",21,"software Engineer") ;

    采用工厂模式虽然解决了创建多了相似对象的问题,但是却没有解决对象识别的问题(即怎样知道一个对象的类型)

    2.构造函数模式

      function Person(name,age,job){

        this.name = name;

        this.age = age;

        this.job = job;

        this.sayName = function(){

          alert(this.name);

        };

      }

    var person1 = new Person("Emily",22,"software engineer");

    1. 没有显示的创建对象

    2.直接将属性和方法赋给了this对象

    3.没有return 语句

    以这种方式调用构造函数实际上会经历以下4个步骤:

    1)创建一个新对象;

    2)将构造函数的作用域赋给新对象(this就指向了这个新对象);

    3)执行构造函数中的代码

    4)返回新对象

    缺点:

    每个实例都会有一个方法,但是这些方法不是同一个function的实例。函数也是对象,因此每次定义一个函数,也就是实例化了一个对象。

    3.原型模式

      function Person(){

    }

      Person.prototype.name = "Emily";

      Person.prototype.age = 20;

      Person.prototype.job = "SoftWare Engineer";

      Person.prototype.sayName = function(){

        alert(this.name);

    };

      var person1 = new Person();

    属性和方法,均放在原型中,而原型模式:共享属性。

    当创建一个实例时候,会能够访问到原型中的属性和方法,而该实例如果修改了原型中的属性和方法,也会影响到其他的实例。

    4. 组合使用构造函数模式 和 原型模式

      function Person(name,age,job){

        this.name = name;

        this.age = age;

        this.job = job;

    }

      Person.prototype = {

      constructor : Person;

      sayName : function(){

        alert(this.name);

      }

    }

    var person = new Person("Emily" , 22,"Software Engineer")

      构造函数中定义实例属性,原型中定义共有的属性和方法。

  • 相关阅读:
    Python学习笔记 第四天
    Python学习笔记 第三天
    linux系统优化(CentOS7)
    ARMS踩坑合集
    zabbix报错合集(附解决方法)
    keepalived
    ansible
    nginx
    安装虚拟机
    linux发展、redhat与centos的区别
  • 原文地址:https://www.cnblogs.com/rabbit-lin0903/p/11229110.html
Copyright © 2011-2022 走看看