zoukankan      html  css  js  c++  java
  • js原型个人理解

    首先: var obj = 对象, ctr = 构造函数;

    1.所有对象都有__proto__ 属性: obj.__proto__;

    2.所有构造函数都有prototype属性: ctr.prototype;

    3.一个对象的__proto__ 指向 其构造函数的原型,也就是 obj.__proto__ ===  ctr.prototype;

    obj.__proto__  是一个对象的表现;是一个继承的属性;表示对象是来自于哪里,并携带创建这个对象的构造函数一些特性,自身属性外的所有继承的属性都在这里(获取继承);在构造函数原型对象的constructor没有被改变的情况下,完全可以体现出其血统 ;

    ctx.prototype   是一个构造函数的表现;构造函数的原型;包含一个指向构造函数自身的constructor(用于创建实例对象独有属性,及标注实例血统);以及所有需要被继承的属性;

    那么问题来了,原型是由谁创建的呢? 先理解为他是一个由 "神" 创建的对象~

    因为JavaScript一切皆对象,所以所有的 "对象" 都有一个对象的表现

    通过 __proto__ 和 prototype 可以表现出看出一个 "对象" 的表现

    1.函数对象的表现

    所有构造函数都是Function 创建的,包括Function自身,因为obj.__proto__可以找出其来源,所以会有以下表现

    2.构造函数对象的表现

     先看一下,构造函数和函数的区别:

     

    都是函数对象,emmm...

    再看一下所有函数对象都有的原型

    都是一个带有consrtuctor属性的对象;二者并没有什么大的区别,所以为了区分,在定义时,将构造函数首字母大写以便区分;

    Function也是构造函数,只是他是特殊的,他的构造函数是它自身Function.constructor === Function,原型的构造函数也是自身Function.constructor ===Function;

    3. 函数原型

    因为ctr(构造函数).prototype也是一个对象,可以通过__proto__ 找到其原型的构造函数,可以看出ctr.prototype是一个继承Object.prototype的Object的实例,Object的属性通过prototype传递给ctx.prototype, 再由ctx.prototype传递给他的实例;

    继承的关键也就是构造函数的prototype;

    3.原型链:

     

    通过原型一层一层向后传递,形成原型链,给原型添加属性会传递给后代;

    实例继承的属性是预先向构造函数原型中添加的;

    通过溯本还原,

    Object.prototype.__proto__ === null

    所以原型链的顶端为null,这个神身份就此曝光,而且他也是一个对象;typeof null === "object"

    而Function.prototype.__proto__ === Object.prototype,则表明了函数是JavaScript第一公民的来历;因为他正是从无到有的第一个对象;

  • 相关阅读:
    hdu 5025 bfs+状压
    hibernate的saveOrUpdate方法
    jsp中使用css选择器与<c:foreach>标签的问题
    5- js 正则的方法
    cookie存储的值
    word中目录的灰色是怎么回事?
    css三角形
    windows下,OracleServiceXXX和Oracle 实例的关系
    echo的功能
    myeclipse 删除不再使用的工作空间记录
  • 原文地址:https://www.cnblogs.com/tatelZhang/p/7764653.html
Copyright © 2011-2022 走看看