• 面向对象编程


    定义

    面向对象程序设计(英语: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 编程的一种主流方式,这种方式可以提高代码的易读性,减少代码的冗余,降低代码设计的难度

  • 相关阅读:
    java多线程(八)-死锁问题和java多线程总结
    java多线程(七)-线程之间的 协作
    java多线程(六)-线程的状态和常用的方法
    在SOUI中使用网格布局
    SOUI视频教程
    在SOUI中使用动态多语言切换
    在SOUI中使用窗口自適應大小
    在SOUI中使用线性布局
    搜索引擎广告过滤Chrome插件
    第三十四篇:在SOUI中使用异步通知
  • 原文地址:https://www.cnblogs.com/qimuz/p/12740831.html
Copyright © 2020-2023  润新知