js中只有对象,包括对象,函数,常量等。

prototype

  • 只有函数里有这个属性。
  • 对象里可以设置这个属性,但是没这个属性的意义
  • prototype指向一个对象,可以添加想要的方法。
  • 该对象里有一个constructor属性,默认指向了这个函数。

proto

  • 对象里有这个属性。
  • 功能: 如果要一个对象的属性,会先在这个对象里查找,如果这个对象里没有这个属性,则会在这个对象里__proto__的对象里查找这个属性
  • 如果这个对象本身还有一个 proto 属性,则会继续在__proto__.__proto__ 里找这个属性。
  • 该属性无法在ie11以下,无法直接访问

new 对象

  • new function 创建对象的时候,会首先创建一个空对象
  • 传入这个fuction赋值给this对象
  • 把该function里的prototype 赋值给这个对象的 __proto__属性。
  • 所创建出来的对象,这是为什么创建出来的对象可以访问之前function里prototype设置属性

一些实例

  • proto

    var a = {};
    a.__proto__ = {
    "show":function(){
    document.write("show");
    }
    }
    a.show()//show
  • function 里

    function B(){
    
    }
    B.prototype.show1 = function(){
    document.write("B:show1");
    }
    B.show = function(){
    document.write("B:show");
    }
    new B().show1();// 对象只与方法里prototype 关联
    new B().show();//B对象里直接设置的方法不会关联到方法里。
  • 方法调用以及this理解

    • this 其实就是调用方法 . 之前的对象。
    • 如果使用call,apply方式调用,则this是用第一个参数赋的值。
    function B(){
    
    }
    B.show = function(){
    document.write(this);
    } B.show();//打印结果为: function B

基础的东西都说完了,咱们来基于这些做一些拓展

继承封装

  • 方式1

    ext = function(child,parent)
    {
    var _proto = function(){};
    _proto.prototype = parent.prototype;
    child.prototype = new _proto();
    child.prototype.constuctor = child;
    child.super=parent;
    }
    Object.prototype.super = function(){};
  • 方式2

    ext = function(child,parent)
    {
    child.prototype.__proto__ = parent.prototype;//new _proto();
    child.prototype.constuctor = child;
    child.super=parent;
    }
    Object.prototype.super = function(){};
  • 使用

    //定义Person
    function Person(name, age)
    {
    this.name = name;
    this.age = age;
    } Person.prototype.speak = function()
    {
    document.write("name = "+this.name + "<br/>");
    } //定义学生,继承了Person
    function Student(name,age)
    {
    Student.super.call(this,name,age);
    this.score = 90;
    }
    ext(Student,Person) Student.prototype.show = function()
    {
    document.write("show name=" + this.name + ",score = "+this.score +"<br/>");
    } //定义Academician 继承Student
    function Academician(name, age){
    Academician.super.call(this,name,age);
    }
    ext(Academician,Student); var academ = new Academician("狗蛋",20); academ.show();
    academ.speak();
  • 打印结果

    show name=狗蛋,score = 90
    name = 狗蛋

[js学习笔记] 原型链理解的更多相关文章

  1. 【学习笔记】深入理解js原型和闭包系列学习笔记——精华

    深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨  不是object呢,js为何要对函数做这样的区分 ...

  2. js原型链理解(2)--原型链继承

    1.原型链继承 2.constructor stealing(构造借用) 3.组合继承 js中的原型链继承,运用的js原型链中的__proto__. function Super(){ this.se ...

  3. JS 学习笔记--9---变量-作用域-内存相关

    JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...

  4. WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)

    WebGL three.js学习笔记 使用粒子系统模拟时空隧道 本例的运行结果如图: 时空隧道demo演示 Demo地址:https://nsytsqdtn.github.io/demo/sprite ...

  5. vue.js 学习笔记3——TypeScript

    目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...

  6. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  7. 【转】Backbone.js学习笔记(二)细说MVC

    文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Bac ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. Vue.js学习笔记(2)vue-router

    vue中vue-router的使用:

随机推荐

  1. 【HotSpot】 jps

    jps(1) General Commands Manual jps(1) Name jps - Java Virtual Machine Process Status Tool SYNOPSIS j ...

  2. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有

    今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午.......也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用 ...

  3. Spring(三)--AOP【面向切面编程】、通知类型及使用、切入点表达式

    1.概念:Aspect Oriented Programming 面向切面编程 在方法的前后添加方法   2.作用:本质上来说是一种简化代码的方式      继承机制      封装方法      动 ...

  4. macaca 测试web(2)

    还是以博客园登录为例, 可以查看上一篇上一篇 这次只测试登录,使用ddt的数据驱动,这里我博客也有记录 地址 其实我在uiautomator +python 实现安卓自动化 一文当中我已经使用过ddt ...

  5. 【DDD】领域驱动设计精要

    本文算是<领域驱动设计>这本书的读书笔记,加上自己的一些读后感.网上有很多这本书的读书笔记,但是都是别人的,不如自己总结的理解深刻.建议大家在读这本书时结合<实现领域驱动设计> ...

  6. js封装成插件

    由于项目原因,工作一年多还没用js写过插件,项目太成熟,平时基本都是在使用已经封装好的功能插件.感觉自己好low......这两天想自己抽空写一个canvas画统计图与折现图的插件,所以就去网上学习了 ...

  7. bugly cocos 接入和 符号表使用

    bugly cocos 接入和 符号表使用 在bugly网站下载 BuglyCocosPlugin 的sdk ios 1. 在 项目的 classes 里面新建 文件夹  BuglyCocosPlug ...

  8. echarts堆叠图展示,根据数据维度的粒度判断是否展示数据

    1.定义一个参数,返回根据判断什么条件是否显示值; 2.var a = '<%=(String)request.getAttribute("type")%&>' ...

  9. struts.xml如何加载到及配置问题

    今天项目做客户化处理,看到struts.xml,突然间想不起来这个文件从哪里加载的了,真是越学越回去了.这里记录下. web工程启动的时候,系统会加载web.xml文件,在这个时候会加载Spring的 ...

  10. java中super关键字

    1.子类的构造函数如果要引用super的话,必须把super放在函数的首位,如果想用super继承父类构造的方法,但是没有放在第一行的话,那么在super之前的语句,肯定是为了满足自己想要完成某些行为 ...