JS Proptotyp以及__proto__
一直以来都特别疑惑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__的更多相关文章
- js——prototype、__proto__、constructor
Object 1. Object是一个函数(typeof O ...
- 再次理解JS的prototype,__proto__和constructor
个人总结: 下面这篇文章很好的讲解了js原型,原型链,个人的总结是要记住这三个属性 prototype.__proto__和constructor 首先明确,js中一切都是对象object(A). ( ...
- js & object & prototype & __proto__ & prototype chain
js & object & prototype & proto & prototype chain constructor prototype === instance ...
- js中Object.__proto__===Function.prototype
参考:http://stackoverflow.com/questions/650764/how-does-proto-differ-from-constructor-prototype http:/ ...
- JS 中的 __proto__ 、prototype、constructor
首先 先解释这三个属性: (1) prototype : 它是函数独有的,从一个函数指向一个对象(函数的原型),含义是函数的原型对象,也就是这个函数所创建的实例的原型对象.(普通函数的该属性没有作用 ...
- js - __proto__ 、 prototype和constructor
零.资料与前言 0x1 材料: 1.帮你彻底搞懂JS中的prototype.__proto__与constructor(图解) 0x2 前言 之前也尝试总结过 js 中的 __proto__ . pr ...
- JS核心系列:浅谈原型对象和原型链
在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...
- 原型及原型链,以及prototype和__proto__属性(笔记便于以后复习)
首先,js的数据结构有 原始类型(5种):Boolean.Number.String.Null.Underfined, 然后是引用类型:Array.Date.Error.RegExp.Function ...
- constructor __proto__ prototype
js里面constructor __proto__ prototype这三个属性比较难理解,在重点研究这三个属性后,在这里做一个笔记, constructor:构造器,每个对象都有这个属性,他指向构 ...
随机推荐
- (简单) FZU 2150 Fire Game ,Floyd。
Problem Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board ...
- phpcms v9 在当前栏目下获取父栏目与当前栏目的名称与连接
<a href="#" target="_blank">首页</a> > <a href="{$CATEGORYS ...
- uartz Spring与Spring Task总结
Spring对Quartz作了一个封装,同时,Spring自己也提供了一个任务定时器(spring-task),现把它总结一下. 对于Quartz,我们使用的时候主要是注重两个方面,一个是定时任 ...
- angular中的$http配置和参数
依赖:$httpBackend $cacheFactory $rootScope $q $injector 使用:$http(config); 参数: method:字符串,请求方法. url:字符串 ...
- [noip2013]货车运输(kruskal + 树上倍增)
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...
- java基础——1.内部类
内部类创建 从外部类的非静态方法之外(?=静态方法)的任意位置创建某个内部类的对象,要加入外部类的名字,OuterClassName.InnerClassName public class Parce ...
- mysql,mybatis使用中遇到的类型转化的问题
产生原因还没有明白,先记录一下. 使用DATEDIFF函数,计算两个日期的时间差.在mybatis中,resultType 是map.在代码中,根据map的key取值的时候. 在mysql 5.5.3 ...
- AtCoder Beginner Contest 052 ABCD题
A - Two Rectangles Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement The ...
- UVa 336 - A Node Too Far
题目大意:在计算机网络中,每条信息都有一个TTL值,在信息到达一个节点时,TTL值首先减1,如果TTL为0,则丢弃该信息报文.给一个网络的配置,给定源点和TTL值,判断该网络中有多少节点不可到达. 无 ...
- Outlook 2013 电子邮件账户设置备份与恢复
与之前版本不同,Outlook 2013需要备份以下注册表内容:HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Profiles恢复时 ...