原型及原型链,以及prototype和__proto__属性(笔记便于以后复习)
首先,js的数据结构有 原始类型(5种):Boolean、Number、String、Null、Underfined,
然后是引用类型:Array、Date、Error、RegExp、Function、Object,注意这里,引用类型的返回值,其实只有2种,也就是Function和Object,用typeof就可以判断出。
js一切都是对象,Function自然也是对象,甚至Function比Object的功能更强大,new Function出来的变量,比如:
function Foo(){}
var foo = new Foo();
typeof Foo //function
typeof foo //object
Function和Object的区别,重点来了,Function有prototype属性,而Object是没有的:
console.log(Foo.prototype) //Object
console.log(foo.prototype) //undefined
下面来说原型链和继承:
js是通过__proto__来明确继承 的关系,__proto__不同于prototype,因为__proto__是对象的属性,因此Function和Object都有这个属性,在强调一下,Object是没有prototype的,而Function和Object都有__proto__属性。
然后看一下__proto__这个属性是怎么工作的,例如:
var a = {aa:1};
var b = {bb:2};
var c = {cc:3};
a.__proto__ = b;
b.__proto__ = c;
console.log(a.aa);//
console.log(a.bb);//
console.log(a.cc);//
这就简单的实现了继承,也就是原型以及原型链。既然__proto__解决了继承的问题,那么prototype干什么呢?当然有它自己的用处,再回到上一个例子:
function Foo(){}
var foo = new Foo();
console.log(Foo.prototype===foo.__proto__)//true
精髓就在于此:通过new构造函数构造出来的实例对象foo,它的__proto__属性,其实是一个指针,它指向的是构造函数Foo的prototype属性。
为了便于以后复习,我总结一下上面内容,可能有理解不对的地方,希望大神指正。
1、object.__proto__指向他的原型对象,如果他的原型对象的__proto__还有上面的原型对象,比如:
var a = {aa:1};
var b = {bb:2};
var c = {cc:3};
a.__proto__ = b;
b.__proto__ = c;
那么,a就继承了c的属性和方法,这就是原型和原型链,继承就是这样实现的。
2、关于prototype和__ptoto__:
首先,Function和Object都属于引用类型(平级的),都是对象,因此,都具有__proto__属性。
其次,Function有prototype属性而Object没有。
prototype和__ptoto__两者的关系是,实例对象的__proto__指向的就是构造函数的prototype:
function Foo(){}
var foo = new Foo();
console.log(Foo.prototype===foo.__proto__)//true
原型及原型链,以及prototype和__proto__属性(笔记便于以后复习)的更多相关文章
- 一张图搞懂 Javascript 中的原型链、prototype、__proto__的关系 转载加自己的总结
1. JavaScript内置对象 所谓的内置对象 指的是:JavaScript本身就自己有的对象 可以直接拿来就用.例如Array String 等等.JavaScript一共有12内置对象 ...
- javascript原型与原型链,prototype、__proto__、constructor
javascript通过构造函数(constructor)和原型链来(prototype chain)实现其他面向对象语言的类概念.ES6语法中引入了“类”(class)的概念,但只是一个语法糖,只是 ...
- 彻底理解什么是原型链,prototype和__proto__的区别以及es5中的继承
再讲一遍好了( 参考https://blog.csdn.net/cc18868876837/article/details/81211729 https://blog.csdn.net/lc23742 ...
- Javascript中的原型链、prototype、__proto__的关系
javascript 2016-10-06 1120 9 上图是本宝宝用Illustrator制作的可视化信息图,希望能帮你理清Javascript对象与__proto__.prototype和 ...
- JavaScript原型和原型链( prototype 与 __proto__ )
一.函数对象 所有引用类型(函数.数组.对象)都拥有__proto__属性(隐式原型) 所有函数拥有 prototype 属性(显式原型)(仅限函数) 原型对象:拥有 prototype 属性的对象, ...
- Javascript之傻傻理不清的原型链、prototype、__proto__
新人学习Javascript,其中的原型链一直是云里雾里,不得要领,查了很多相关资料,觉得这遍讲得最为清晰易懂,特转载分享,共同学习. 1. JavaScript内置对象 所谓的内置对象 指的是:Ja ...
- 理解js中的原型链,prototype与__proto__的关系
说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...
- 【转】理解js中的原型链,prototype与__proto__的关系
说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...
- [转]理解js中的原型链,prototype与__proto__的关系
本文转自:http://rockyuse.iteye.com/blog/1426510 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script typ ...
随机推荐
- Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎
前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...
- MongoDB入门解析【学习记录】
刚开始学习mongodb,对笔记做了一个整理.是基于nodejs来学习的. 1.mongodb介绍 mongodb 是C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添 ...
- Linux服务器下对Oracle作Rman备份
由于工作需要,最近要对几台Linux系统下的Oracle数据库进行Rman备份,就在操作的同时,整理了一下,方便今后作为资料进行查阅. ------------------------Linux服务器 ...
- 【Vue】详解Vue组件系统
Vue渲染的两大基础方式 new 一个Vue的实例 这个我们一般会使用在挂载根节点这一初始化操作上: new Vue({ el: '#app' }) 注册组件并使用—— 全局注册 通过Vue.comp ...
- nodejs 搭建 RESTful API 服务器的常用包及其简介
常用包 框架: yarn add express 数据库链接: yarn add sequelize yarn add mysql2 处理 favicon: yarn add serve-favico ...
- ES6关于Unicode的相关扩展
前面的话 字符串是编程中重要的数据类型,只有熟练掌握字符串操作才能更高效地开发程序.JS中的字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列.在过去,16位足以包含任 ...
- java内存区域——深入理解JVM读书笔记
本内容由<深入理解java虚拟机>的部分读书笔记整理而成,本读者计划连载. 通过如下图和文字介绍来了解几个运行时数据区的概念. 方法区:它是各个线程共享的区域,用于内存已被VM加载的类信息 ...
- Spring Ioc-依赖注入的几种方式
一 setter方法注入 配置文件如下: <bean id="helloAction" class="org.yoo.action.SpringSetterHell ...
- Android - 基于 Speex 的高度封装语音库,0 耦合使用
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- PHP中通过sqlsrv调用存储过程——成绩排名去除重复字段的数据行
培训考试项目中,需要实现考试成绩排名:排名参考项为分数(score降序).参加日期(attendtime升序).第几次参加考试(frequency升序):并且,每个用户只保留一条数据(pid). 考试 ...