zoukankan      html  css  js  c++  java
  • js高级中的原型

    原型

    //prototype 叫原型,每个构造函数中都有这个属性,但这个属性也是一个对象,所以叫”原型对象“---程序员用的


    //__proto__ 叫原型,每个实例对象中都有这个属性,这个属性也是一个对象,所以也叫”原型对象“---浏览器用的

    构造函数中有一个属性:prototype,叫原型,也是对象,叫原型对象,程序员用的

    实例对象中有一个属性:__proto__,叫原型,也叫原型对象,浏览器用的

    实例对象的__proto__指向的是自己的构造函数中的原型对象:prototype

    如果实例对象中的属性和原型对象中的属性名重名,不会修改原型对象中属性的值

    实例对象的__proto__ 指向了构造函数中的原型对象prototype
    对象.__proto__  ------> 构造函数.prototype
    原型对象中(prototype)有一个属性叫:constructor(构造器)指向的是自己的构造函数

    原型的指向是可以改变的

    对象里面都有 __proto__原型对象


    实例对象是通过构造函数来创建


    构造函数中有原型的属性---->原型对象(prototype


    实例对象的原型__proto__指向了构造函数中的原型对象(Student.prototype


    console.log(stu1.__proto__ === Student.prototype);


    //构造函数 和 原型对象中的 this 都指向------>实例对象

    //实例对象中没有prototype原型对象,但是有__proto__原型,指向的是自己的 构造函数中的原型对象(prototype
    构造函数中有prototype原型对象------>里面还有一个__proto__原型对象

     ***原型链*****

     实例对象和原型对象之间是通过__proto__来联系的,这种关系叫做原型链

    *实例对象的__proto__指向自己的构造函数的原型对象(prototype),

    构造函数的原型对象(prototype)中的__proto__指向的是Object.prototype

      Object.prototypede中的__proto__指向的是 null

    面向对象的思想:是编程的一种思想
    面向对象的特性: 封装 继承 多态
    1.封装:把代码进行包装,使用的时候统一调用
    2.继承:类与类之间的关系,但是JS不是一门真正的面向对象语言,hi模拟面向 对象的思想进行编译,JS中的继承是基于原型的
    3.多态:同一个行为针对不同的对象,产生不同的结果,主要子设计模式中体现

    原型链的指向可以改变

    JS中的继承是局域原型:把原型的指向改变就可以实现继承
    继承的方式:
     1.拷贝继承(克隆继承)--->把一个对象中的属性全部拷贝一份存放到另一个对象中
    2.对象冒充:没有继承,假的继承,但是调用了其他构造函数中的属性了,调用完直接删除。给调用者的感觉发生了继承
    3.组合继承:调用了call方法,改变了this的指向,也改变了原型的指向

     函数定义方式
    1.函数声明
     function f1(){};   函数的调用f1();

     2.函数表达式
    var ff = function f2() {};  函数调用: f2();

     3.Function构造函数方式定义函数
    var ff = new Function("num1","num2","return num1+num2");

    作用域链:当函数内部访问一个变量的时候,这个变量在这个函数内部不存在是,就去这个函数的外面(上面)查找,找到了就能够使用,找不到继续向外面(上面)找,直到找到函数所在的这个的script标签中(全局作用域)

    全局的作用域中的定义的变量可以看成是在作用域链的最上面(0级作用域

    作用用最高是0级,0  1  2  3   4   数字越大 等级越低,越往里

    闭包:一个函数A有个函数B,函数B可以访问函数A中定义的变量,此时还可以进行数据的缓存,形成了闭包

    闭包作用:缓存数据

    缺陷:延长作用域链,长时间的内存得不到释放

    闭包的两种方式

    1.函数模式:函数中有函数

    2.对象模式:函数中有对象

    沙箱:在虚拟的世界中模拟真实的世界,结果和真实世界的结果一样,但不影响真实世界的样子

    作用:隔离外部数据

    原型链

    函数都是对象,对象不一定是函数(Math

    构造函数:function F1()({};  function OPbject(){};  function Function(){};

    对象中都有prototype原型:指向自己的原型对象F1.prototype

             __proto__原型:指向大的Function中的原型对象Function.prototype

    Var ff = new F1()中的__proto__原型:指向自己的构造函数的原型对象F1.prototype

    总结原型链

    构造函数中有prototype,指向的是自己的原型对象

    构造函数也是函数,函数也是对象

    实例对象中有__proto__,指向的是的构造函数的原型对象prototype

    函数中有prototype,函数也是对象,所以也有__proto__

    函数本身也是Function的实例对象

    实例对象的原型__proto__指向的自身的原型对象prototype,原型对象中也有__proto__,指向的是Object的原型对象prototype

    函数是对象,普通函数也是对象,Function也是对象

    普通函数都是由Function产生的

    函数一定是对象 对象不一定是函数(Math

    判断Array 是不是对象 ------instanceOf-----------

    Function f1(){};--------普通函数

    F1里有prototype__proto__,prototype中又有__proto__

    **普通函数里的prototype(自己的原型对象)里面的__proto__指向的是Object.prototype

    **普通函数的__proto__指向的是Function里的prototypeFunction.prototype里的__proto__指向的是Object.prototype

  • 相关阅读:
    Drupal 学习笔记 (4)
    property和field有什么区别
    Razor4Orchard v1.2
    Mono喜迁新家http://www.xamarin.com/
    jq中获取属性名的方法
    jquery中的文档操作之五
    PHP基础知识之三
    php基础知识之一
    注意点
    jquery中ajax的学习之$.ajax()
  • 原文地址:https://www.cnblogs.com/zhushenshen/p/6718801.html
Copyright © 2011-2022 走看看