zoukankan      html  css  js  c++  java
  • 面向对象编程

    定义

    面向对象程序设计(英语:Object Oriented Programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。

    注:定义来自维基百科

    对象是单个事物的抽象。比如一本书,一个苹果,一只猫都可以是一个对象

    对象也是一个容器,封装了属性和方法。比如一只猫的颜色,年龄等是它的属性,吃饭,叫是它的方法

    面向对象语言的要求

    1. 封装 - 把相关的信息(无论数据或方法)存储在对象中的能力
    2. 聚集 - 把一个对象存储在另一个对象内的能力
    3. 继承 - 由另一个类(或多个类)得来类的属性和方法的能力
    4. 多态 - 编写能以多种方法运行的函数或方法的能力

    创建对象的方法:

    通过对象字面量来创建

    var student = {
      name: "cinthia",
      age: 19,
      gender: "female",
      sayHello: function() {
        console.log("hi,my name is " + this.name);
      }
    };
    

    通过 new Object() 创建对象。

    var student = new Object();
    (student.name = "cinthia"),
      (student.age = 19),
      (student.gender = "female"),
      (student.sayHello = function() {
        console.log("hi,my name is " + this.name);
      });
    

    通过工厂函数来创建对象。

    function createStudent(name, age, gender) {
      var student = new Object();
      student.name = name;
      student.age = age;
      student.gender = gender;
      student.sayHello = function() {
        console.log("hi,my name is " + this.name);
      };
      return student;
    }
    var s1 = createStudent("cinthia", 19, "female");
    var s2 = createStudent("lisa", 19, "female");
    

    通过构造函数来创建对象。

    function Student(name, age, gender) {
      this.name = name;
      this.age = age;
      this.gender = gender;
      this.sayHello = function() {
        console.log("hi,my name is " + this.name);
      };
    }
    var s1 = new Student("cinthia", 19, "female");
    

    构造函数与工厂函数的区别

    • 首先在构造函数内没有创建对象,而是使用 this 关键字,将属性和方法赋给了 this 对象。
    • 构造函数内没有 return语句,this 属性默认下是构造函数的返回值。
    • 函数名使用的是大写的 Student
    • 用 new运算符和类名 Student 创建对象。

    每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身

    原型

    在 JavaScript 中,每一个函数都有一个 prototype属性指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。

    <script type="text/javascript">
        function F() {}
        console.log(F.prototype);  //Object,指向另一个对象
    </script>
    
    成员 描述
    Object.prototype.__ proto __ 指向当对象被实例化的时候,用作原型的对象
    Object . prototype . hasOwnProperty() 返回一个布尔值,用来判断-一个属性是定义在对象本身而不是继承自原型链
    Object . prototype . isPrototype0f() 返回一个布尔值,示指定的对象是否在本对象的原型链中。
    Object. prototype . toString() 返回一个表示该对象的字符串
    Object . prototype.value0f() 返回指定对象的原始值

    原型链

    所有的对象都有原型,而原型也是对象,也就是说原型也有原型,如此下去,也就组成了原型链

    属性搜索原则

    • 首先从对象实例本身开始找,如果找到了这个属性或者方法,则返回。
    • 如果对象实例本身没有找到,就从它的原型中去找,如果找到了,则返回。
    • 如果对象实例的原型中也没找到,则从它的原型的原型中去找,如果找到了,则返回。
    • 一直按着原型链查找下去,找到就返回,如果在原型链的末端还没有找到的话,那么如果查找的是属性则返回 undefined,如果查找的是方法则返回 xxx is not a function

    原型链继承

    利用原型让一个引用类型继承另外一个引用类型的属性和方法

    function Student(name, age, gender) {
      this.name = name;
      this.age = age;
      this.gender = gender;
    }
    Student.prototype.sayHi = function() {
      console.log("hello");
    };
    
    var s1 = new Student("cinthia", 19, "female");
    s1.sayHello(); // 打印 hello
    var s2 = new Student("lisa", 19, "female");
    s2.sayHello(); // 打印 hello
    //s1、s2都继承了sayHello()的方法
    

    面向对象编程是 JavaScript 编程的一种主流方式,这种方式可以提高代码的易读性,减少代码的冗余,降低代码设计的难度

  • 相关阅读:
    UVA 10600 ACM Contest and Blackout(次小生成树)
    UVA 10369
    UVA Live 6437 Power Plant 最小生成树
    UVA 1151 Buy or Build MST(最小生成树)
    UVA 1395 Slim Span 最小生成树
    POJ 1679 The Unique MST 次小生成树
    POJ 1789 Truck History 最小生成树
    POJ 1258 Agri-Net 最小生成树
    ubuntu 用法
    ubuntu 搭建ftp服务器,可以通过浏览器访问,filezilla上传文件等功能
  • 原文地址:https://www.cnblogs.com/qimuz/p/12740831.html
Copyright © 2011-2022 走看看