zoukankan      html  css  js  c++  java
  • js-高级01面向对象及创建对象

    一,对象的定义
    Everything is object (万物皆对象)
    对象是单个事物的抽象。
    对象是一个容器,封装了属性(property)和方法(method)
    ECMAScript-262 把对象定义为:无序属性的集合,其属性可以包含基本值、对象或者函数
    二,什么是面向对象
    面向对象不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性。
    面向对象编程 —— Object Oriented Programming,简称 OOP ,是一种编程开发思想。它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。
    三,面向对象的特征
    1,封装
    2,继承
    3,多态
    四,面向对象与面向过程
    1,面向过程就是亲力亲为,事无巨细,面面俱到,步步紧跟,有条不紊
    2,面向对象就是找一个对象,指挥得结果
    面向对象将执行者转变成指挥者
    面向对象不是面向过程的替代,而是面向过程的封装
    五,创建对象的三种方法
    字面量形式
    系统构造函数Object
    自定义构造函数
    创建一个实例对象,必须使用 new 操作符。以这种方式调用构造函数会经历以下 4 个步骤:
    创建一个新对象
    将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)
    执行构造函数中的代码
    返回新对象
    实例对象中的constructor属性
    对象的 constructor 属性最初是用来标识对象类型的
    可以通过实例的 constructor 属性判断实例和构造函数之间的关系
    注意:这种方式不严谨,推荐使用 instanceof 操作符,后面学原型会解释为什么
    六,对象的原型
    内存浪费问题
    使用构造函数带来的最大的好处就是创建对象更方便了,但是其本身也存在一个浪费内存的问题
    对于每一个实例对象,如果我们在一个实例对象的内部创建一个属性,值为函数。假如创建两个对象,属性名也许一致,看似都是一模一样的内容,但是其实每一次生成一个实例,都会多占用一些内存,如果实例对象很多,会造成极大的内存浪费。为了解决内存浪费问题,引入原型
    基本解决对象数据共享(把公用属性值定义在外部)
    Javascript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。
    
    任何函数都具有一个 prototype 属性,该属性是一个对象。
    构造函数的 prototype 对象默认都有一个 constructor 属性,指向 prototype 对象所在函数。
    通过构造函数得到的实例对象内部会包含一个指向构造函数的 prototype 对象的指针 __proto__。
    实例对象可以直接访问原型对象成员。
    总结:
    任何函数都具有一个 prototype 属性,该属性是一个对象
    构造函数的 prototype 对象默认都有一个 constructor 属性,指向 prototype 对象所在函数
    通过构造函数得到的实例对象内部会包含一个指向构造函数的 prototype 对象的指针 __proto__
    所有实例都直接或间接继承了原型对象的成员
    为什么实例对象可以访问原型对象中的成员?
    先在自己身上找,找到即返回
    自己身上找不到,则沿着原型链向上查找,找到即返回
    如果一直到原型链的末端还没有找到,则返回undefined
    原生对象的原型即系统构造函数
    Object.prototype
    Function.prototype
    Array.prototype
    String.prototype
    Number.prototype
    Date.prototype
    利用自调用函数把局部变量变为全局变量
    好处
    1,避免变量污染
    2,把对象暴露给window已提升
    函数是有参数的,我们可以通过把window对象传入而解决
  • 相关阅读:
    关于数据库的基础知识
    Oracle数据库的上机作业
    PHP表单处理
    EasyUI DataGrid结合ThinkPHP实现增删改查操作———初学者
    Redis crackit
    nodeppt安装后,phantomjs不能运行了 Bad argument
    redis命令
    eclipse编辑web.xml很慢
    客制化jasperreport导出html的过程
    dynamicreport, JFreeChart
  • 原文地址:https://www.cnblogs.com/adylz111/p/13433705.html
Copyright © 2011-2022 走看看