一直以来都特别疑惑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. 变量-数据类型-对象-如何编写python脚本

    标识符的命名规则变量是标识符的例子. 标识符 是用来标识 某样东西 的名字.在命名标识符的时候,你要遵循这些规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’).标识 ...

  2. 跳舞链 Dancing Links

    作为搜索里面的一个大头,终于刷了一部分题目了,跳舞链一般都有现成的模板来套...... 至于跳舞链的学习的话,我觉得http://www.cnblogs.com/grenet/p/3163550.ht ...

  3. WINDOWS动态链接库--MFC规则动态链接库

    第一代window程序员使用windows api进行编程,到了后来,微软推出MFC类库,于是,动态链接库进行了升级,可以在动态连接库中使用MFC的API,这就叫做MFC动态链接库, 其中MFC动态链 ...

  4. ajax 基础2

    连接数据库实现分页功能 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defa ...

  5. 2017-01-11小程序form表单提交

    小程序form表单提交 1.小程序相对于之前的WEB+PHP建站来说,个人理解为只是将web放到了微信端,用小程序固定的格式前前端进行布局.事件触发和数据的输送和读取,服务器端可以用任何后端语言写,但 ...

  6. IOS9中联系人对象的使用及增删改查操作的函数封装

    之前克服重重困难把IOS9中新的类联系人搞明白了,现在把增删改查封装成了函数,如下: // // ViewController.m // IOS9中联系人CNContact的使用 // // Crea ...

  7. HDU 2830:Matrix Swapping II(思维)

    http://acm.hdu.edu.cn/showproblem.php?pid=2830 题意:-- 思路:对于每一列,它是固定的,用dp[][]处理出连续的长度.例如: 假设我们扫第四列的时候, ...

  8. UVa 10812 - Beat the Spread!

    题目大意:知道一场橄榄球比赛比分的和以及差的绝对值,算出这两个数.注意判断结果的可能性(比分为非负数). #include <cstdio> int main() { #ifdef LOC ...

  9. Mybatis学习(7)spring和mybatis整合

    整合思路: 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(spr ...

  10. 1.TCP/IP基本概念

    为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...