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:构造器,每个对象都有这个属性,他指向构 ...
随机推荐
- C# MODBUS协议 上位机(转)
源:C# MODBUS协议 上位机 C#写了一款上位机监控软件,基于MODBUS_RTU协议. 软件的基本结构: 采用定时器(Timer控件)为时间片. 串口采用serialPort1_DataRec ...
- kvm学习小计
1.Kvm安装 安装方法两种方式,一种是直接下载源码编译安装,一种是直接使用yum install kvm/apt-get install kvm,这部分就不详细说明了,我使用的是第二种方法,待后 续 ...
- js数组之迭代方法
ES5为数组对象定义了5个迭代方法(即递归,简单的说就是自己可以调用自己). 每个方法接收两个参数:要在每一项上运行的函数(接收3个参数:数组项的值,该项在数组中的位置,数组对象本身)和(可选的) ...
- SSO单点登录设计
关键字: 单点登录 SSO Session 单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用 ...
- ios页面跳转
reference:http://blog.csdn.net/engandend/article/details/11706323 目前,就我所学到的内容,页面跳转有三种方法 一.直接推到下一个页面 ...
- WPF中ContextMenu通过CommandParameter传参
场景:ListBox中有个ContextMenu,希望点击其中一个菜单项的时候把ListBox当做CommandParameter传递给Command,但是发现无论是通过ElementName还是Re ...
- Mysql死锁问题解决方式 & 聚簇索引、隔离级别等知识
参考了这篇文章:http://www.cnblogs.com/LBSer/p/5183300.html <mysql死锁问题分析> 写的不错. 如果Mysql死锁,会报出: 1.1 死锁 ...
- Angular - - $location 和 $window
$location $location服务解析浏览器地址中的url(基于window.location)并且使url在应用程序中可用.将地址栏中的网址的变化反映到$location服务和$locati ...
- 浅谈Android的Activity运行流程(生命周期)
关于Android的Activity运行流程,我们可以写一些程序来直观的查看Activity的运行流程.在这里我们使用Log工具来获取Activity运行日志.假如我们新建一个Android项目,Pr ...
- Objective-C 关于静态方法与实例方法的转载
objective-c中非常重要的语法知识,在此归纳总结一下. 类方法,也称静态方法,指的是用static关键字修饰的方法.此方法属类本身的方法,不属于类的某一个实例(对象).类方法中不可直接使用实例 ...