• js 面向对象


    面向对象三大特点:

      封装:将一个事物的属性和功能集中定义在一个对象中 (代码重用)

      继承:父对象的成员,子对象不必重复定义,可直接使用,js中一切继承都是继承原型――原型继承(节约内存)。

      多态:同一事物,在不同情况下表现出不同状态;

         一个引用类型(变量)在不同情况下的多种状态

         使用:做面向对象开发时,一个方法不变,但是它接收的参数类型是变化的。

    1、封装

      1. 直接量: var obj={ name:'obj',value:'0000' }; *****js中一切都是对象;一切对象都是关联数组:
      a) 每个属性都有两种访问方式:  obj.name 或 obj["name"]

      2. 实例化Object类型对象: var obj=new Object();
      a) new可省略,()也可省略,不能同时省略

    2、封装与继承

      构造函数:专门描述一类对象的统一结构的函数

      a) 定义构造函数:

      b) 实例化类型的对象: var obj=new 构造函数名/类型名(属性值列表);

      //创建构造函数--反复创建多个相同结构的对象
      function Student(name,age){
        this.name=name;
        this.age=age;
      }

      //实例化对象--创建的对象
      var s1 = new Student("glow",19); //Student {name: "glow", age: 19}  

      console.log(s1);
      var father={bal:1000,car:"infiniti"};
      Student.prototype = father;
      Student.prototype.intrSelf = function(){
        console.log('空对象继承构造函数的原型');
      }

      //s1自动继承intrSelf
      s1.intrSelf() //空对象继承构造函数的原型

      Object.setPrototypeOf(s1,father); //设置s1对象的原型属性为father
       //s1.intrSelf()  => s1.intrSelf is not a function
       console.log(s1.car);//infiniti

      c) new的执行过程: 

        1. var obj = {} ; 创建一个空对象
        2. obj.__proto__ = Student.prototype; 将空对象的__proto__属性赋值为构造函数(Student)的原型(prototype)
        3. Student.call(obj) ;调用构造函数向空对象中添加属性和方法
        4. return obj;  返回新对象的地址给变量

    原型:保存同一类型的所有子对象共有成员的对象

      原型的操作:

      写操作:Object.setPrototypeOf()、

      读操作:Object.getPrototypeOf(Student) //通过子对象,向上获得

        let i = Student.prototype; //通过构造函数获得对象的父级原型对象
        console.log(i)

      生成操作:Object.create()

    原型链: 由各级对象的__proto__属性,逐级继承形成的链式结构,规定局部变量的使用顺序,

        所有原型链的顶部都是Object.prototype,没有则返回undefined

    作用域链: 从当前函数的AO到全局对象window形成的链式结构,规定对象的属性的使用顺序

    自有属性和共有属性判断:

      自有属性:let own = s1.hasOwnProperty("ages") // false

      共有属性:!s1.hasOwnProperty("age")&&("age" in s1)==true  // false

           in: 在对象的整个原型链上查找“属性名”是否存在

    判断两对象间的父子/继承关系:

      let bool = Object.prototype.isPrototypeOf(s1); //父对象.isPrototypeOf(子对象)

    javascript 面向对象编程基础 多态:http://www.jb51.net/article/19720.htm

    js面向对象三大特征之多态笔记:http://www.cnblogs.com/hezhi/p/4578763.html

     

  • 相关阅读:
    Codeforces D
    Codeforces 899E
    Codeforces 898F
    算法笔记--字符串hash
    算法笔记--归并排序
    Codeforces D
    Codeforces 101628A
    牛客练习赛7 E 珂朵莉的数列
    算法笔记--树的直径 && 树形dp && 虚树 && 树分治 && 树上差分 && 树链剖分
    Codeforces 895C
  • 原文地址:https://www.cnblogs.com/ljbkyBlog/p/7302628.html
Copyright © 2020-2023  润新知