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

 

原文地址:https://www.cnblogs.com/ljbkyBlog/p/7302628.html