ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面向对象基础

2021-11-07 13:35:22  阅读:118  来源: 互联网

标签:obj 对象 基础 面向对象 原型 new prototype 构造函数


面向对象(OOP:Object Oriented Programming)

概要

  • 理解面相对象思想
  • 会使用工厂模式
  • 会使用new运算符
  • 会使用构造函数
  • 理解原型
  • 理解原型链
  • 会使用继承
  • 理解类和对象
  • 包装对象

面向对象编程思想

一、面相过程:注重解决问题的步骤,分析问题需要的每一步,实现函数依次调用;

二、面相对象:是一种程序设计思想。将数据和处理数据的程序封装到对象中;

三、面相对象特性: 抽象、 继承、封装、多态

优点:提高代码的复用性及可维护性;

Javascript 是一种基于对象的语言,几乎所有东西都是对象;

对象创建方法:

  • 字面量创建

  • new Object()创建

  • Object.create()创建:创建对象的原型;

工厂模式

一、工厂模式---提高代码复用性;
方法(){原料,加工,出厂}

new运算符

  • new的特点:1.new执行函数 2.自动创建空对象; 3.this绑定到空对象;4 隐式返还this;5.
  • 通过new来改造工厂模式

构造函数

  • 构造函数首字母大写
  • this指向实例化对象
  • 静态属性及方法属于类
  • 静态方法里的this;

工厂模式对比构造函数/特点

  • A.prototype原型:公共空间存放公共方法(节约内存 ##构造函数提升性能
  • 对象识别:a.consturctor=>A 由A构造a

prototype原型

  • 对象其属性和方法来自两个部分-构造函数+原型(追加)
  • 原型本身是一个对象,是一个公共空间,存放公共方法(节约内存。

原型构造函数及对象关系

  • 对象其属性和方法来自两个部分-构造函数+原型(追加)。构造函数 通过new实例化 对象;a.proto== A.prototype

  • 构造函数A.prototype=>原型;原型的固有属性constructor指向构造函数 A.prototype.constructor == A; a.consructor == A

  • 应用:判断实例化对象的类型"a".constructor===String

原型链

  • 对象之间的继承关系,通过prototype原型对象指向父类对象,直到指向null为止,这样就形成了一个原型指向的链条,称之为原型链;
  • 查找对象的属性或方法时,就近:先在对象自身上查找,如果不存在就去原型链中查找 ,直到找到为止。如果还找不到返回 undefined。

继承

  • 继承:子类继承父类所有属性和行为,父类不受影响。
  • 目的:找到类之间的共性精简代码
  • 方式:
  1. 构造函数继承-内部-call,apply([数组形式的参数]),bind(返回一个函数,不会立即执行。())

  2. 原型链继承-外部-B.prototype==new A()
    深拷贝继承-

    • 传值和传址问题
      基本数据类型:Number、String、Boolean、Null、Undefined传值
      复杂数据类型/引用数据类型:Array、Date、Math、RegExp、Object、Function等传址,互相影响--》解决深拷贝
    • 深拷贝方式:
    1.JSON序列化
             json.parse(json.stringfy(obj))
             不足:丢失拷贝对象的函数、undefined等值
    
    2.封装深拷贝函数
                               function deepCopy(obj){
    			      let newObj = Array.isArray(obj)?[]:{};
    			      for(let key in obj){
    			          if(obj.hasOwnProperty(key)){
    			                if(typeof obj[key] == "object"){
                  				   newObj[key] = deepCopy(obj[key]);
              					}else{
    			                   newObj[key] = obj[key];
    				  return newObj;
    
    3. 组合继承-
    function Dad(){
        this.name = "张三";
    }
    Dad.prototype.hobby = function(){
        console.log("喜欢篮球");
    }
    function Son(){
        Dad.call(this);
    }
    let F = function(){}
    F.prototype = Dad.prototype;
    Son.prototype = new F();
    Son.prototype.constructor = Son; 
    let newSon = new Son();
    newSon.hobby();
    

包装对象

  • 除过null,undefined,基本类型都有自己对应的包装对象:String Number Boolean
  • 包装对象把所有的属性和方法给了基本类型,然后包装对象消失

标签:obj,对象,基础,面向对象,原型,new,prototype,构造函数
来源: https://www.cnblogs.com/lixialian/p/15519621.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有