一直以来都特别疑惑js原型链的只是,每次看到类似的文章也是迷迷糊糊,今天终于有点小的感悟,记录下来

在JS中一切都是对象,而通过其它的面向对象语言,对象又是类型的实例,所以类型和对象是不同的,那么在js里边是怎样的呢?

我们知道类型是可以被实例的,也就是类型可以使用new关键字,js中的类型有这些Array, Boolean, Date, Error, Function, Number, Object, RegExp, String

做实验可以发现,这些都是可以被成功实例化

如果将new关键字用在实例出来的对象伤,很明显会报错,不是一个构造器

而我们在做另一个实验

可以发现凡是类型都是有prototype属性的,反之对象的prototype属性是未定义

在控制台直接输入这些类型,打印出来的是一个function,那么其实可以理解为这些类型的本质都是函数,刚刚有说到类型全部都是可以被实例化的并且具有prototype属性,那么我们声明一个函数,实验

印证了我的观点,这些类型的本质都是函数,函数也可以当作一个类型。

我们都知道prototype就是原型的意思,那么也就是说只有类型才具有原型,那么这个原型到底是什么呢?

既然是原型,那么我们用最基本的字面意思来理解,就是它的本真,它的最原始的状态,我们尝试向Object的原型添加属性,可以发现,既可以直接被Object.找到也可以被Object的实例找到,用其它面向对象语言来理解就是通过prototype注册的属性既是静态属性也是非静态属性(这里用的Object类型,如果尝试其它类型例如Number,你会看到不一样的哦)。

但是注意到一点,如果直接通过Object来添加属性,如Object.C,那么C只能是通过Object.找到,而不能被Object的实例找到,理解为静态属性。

所以,prototype就是类型的原型,通过原型添加属性和方法(其实有些废话的,因为这个文章其实就是一个笔记,我目前只理解到这里)。

对了,还有__proto__属性,我们可以发现,不管对象还是类型都有__proto__属性,__proto__永远指向的都是它的父级元素,就跟一个链条一样我们永远可以通过__proto__找到它的父级的原型,

但是这也得有个尽头不是,总不可能一直指向指向虚无吧,做个实验发现,不管什么最终都会指向Object的原型,再找Object的原型的原型链呢,就返回了null,所以一切皆空啊。

夹杂了太多的个人理解,因为确实是控制台打印出来的例子,所以大的错误应该是没有的,但是肯定会有一些描述不准确或者是我自己理解的与真实的存在出入的地方,希望看到的朋友帮忙指出来。我也在继续学习原型链的知识,一步步理解它。

JS Proptotyp以及__proto__的更多相关文章

  1. js——prototype、__proto__、constructor

                                       Object                                    1. Object是一个函数(typeof O ...

  2. 再次理解JS的prototype,__proto__和constructor

    个人总结: 下面这篇文章很好的讲解了js原型,原型链,个人的总结是要记住这三个属性 prototype.__proto__和constructor 首先明确,js中一切都是对象object(A). ( ...

  3. js & object & prototype & __proto__ & prototype chain

    js & object & prototype & proto & prototype chain constructor prototype === instance ...

  4. js中Object.__proto__===Function.prototype

    参考:http://stackoverflow.com/questions/650764/how-does-proto-differ-from-constructor-prototype http:/ ...

  5. JS 中的 __proto__ 、prototype、constructor

    首先 先解释这三个属性: (1) prototype  : 它是函数独有的,从一个函数指向一个对象(函数的原型),含义是函数的原型对象,也就是这个函数所创建的实例的原型对象.(普通函数的该属性没有作用 ...

  6. js - __proto__ 、 prototype和constructor

    零.资料与前言 0x1 材料: 1.帮你彻底搞懂JS中的prototype.__proto__与constructor(图解) 0x2 前言 之前也尝试总结过 js 中的 __proto__ . pr ...

  7. JS核心系列:浅谈原型对象和原型链

    在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...

  8. 原型及原型链,以及prototype和__proto__属性(笔记便于以后复习)

    首先,js的数据结构有 原始类型(5种):Boolean.Number.String.Null.Underfined, 然后是引用类型:Array.Date.Error.RegExp.Function ...

  9. constructor __proto__ prototype

    js里面constructor __proto__  prototype这三个属性比较难理解,在重点研究这三个属性后,在这里做一个笔记, constructor:构造器,每个对象都有这个属性,他指向构 ...

随机推荐

  1. HAProxy 7层 负载均衡

    系统 CentOS 5.8 x64 wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.26.tar.gz cd haproxy-1.3.2 ...

  2. mysql基础-- 一条请求执行多条SQL语句

    最近做一个数据库初始化工具的时候发现了这个问题,就是在一个Statement中执行一条SQL语句的时候可以正确执行,如果同时执行多条,就会报SQL语法错误,伤透了脑筋. 经过网上查找,发现有两种解决办 ...

  3. Spring--Bean scope

    singleton, prototype,request, session, global session bean.xml: <?xml version="1.0" enc ...

  4. Java设计模式遵循的七大原则

    最近几年来,人们踊跃的提倡和使用设计模式,其根本原因就是为了实现代码的复用性,增加代码的可维护性.设计模式的实现遵循了一些原则,从而达到代码的复用性及增加可维护性的目的,设计模式对理解面向对象的三大特 ...

  5. ubuntu升级php版本

    如果安装的 PHP 版本过低的话,可以通过下面的指令来升级: sudo add-apt-repository ppa:ondrej/php5   sudo apt-get update   sudo  ...

  6. eclipse快速定位java对应的class

    当前设置值,只能定位class文件 设置eclipse External Tools Configurations... Program --> new New 创建viewclass.bat文 ...

  7. php中DateTime的format格式以及 TtoDatetime函数

    Definition and Usage The date() function formats a local time/date. Syntaxdate(format,timestamp)Para ...

  8. HCSR04超声波传感器驱动

    HC_SR04是一款使用较为广泛的超声波测距模块,模块图如下 该模块具有四个引脚,分别为VCC GND TRIG ECHO,其中VCC GND为供电脚 TRIG为测距触发引脚,ECHO为测距输入引脚 ...

  9. _foreach

    从JDK1.5之后增加的foreach循环取消索引 for(类型 变量 : 数组 | 集合){ 每一次循环会自动将数组内容设置给变量 } 范例: ,,,} ; for(int x : i){ Syst ...

  10. ZipFile和ZipInputSteam解压zip文件

    最近有个需求,要接受上穿的zip文件,解压后读取里面的文件(应该还有目录),提前储备一下需要的知识. 贴在博客上,有需要的可以参考. ZipInputStream解压文件: @Test public ...