JavaScript-[[prototype]]的另一种理解

ldld 2019-05-15 原文

JavaScript-[[prototype]]的另一种理解

[[prototype]]简介

javascript 中每一个对象都会有一个特殊的内置属性[[prototype]],这个就是对其他对象对引用。有了这个作为基础去关联其他对象,就能理解继承机制。Chrome浏览器下,我们可以通过xxObj.__proto__去访问这个[[prototype]]

注意,[[prototype]]与prototype不一样。任何一个对象都有[[prototype]],只有function才有prototype属性

[[prototype]]从哪里来

看如下例子
function Foo(){

}
var a = new Foo();

console.log(a.constructor ===  Foo.prototype.constructor); // true

console.log(a.__proto__ ===  Foo.prototype); // true

本例子a 实例的__proto__ 和 constructor 在new操作的时候象默认生成的吗?

答案不是。

实际上的__proto__ 和 constructor 并不存在a这个实例上,它跟其他的函数,比如toString,isPrototypeOf一样,内置在Object中,而且这些方法属性不可枚举。

我们可以换一个方式理解__proto__

Object.defineProperty(Object.prototype,"__proto__",{
    get: function(){
        return Object.getPrototypeOf(this);
    },
    set function(o){
        Object.setPrototype(this,o);
    }
})

因此,当一个对象实例,例如a, a.__proto__就调用了a.__proto__()这个方法,也就是调用getter函数。

发表于 2019-05-15 22:13 liudddd 阅读() 评论() 编辑 收藏

 

版权声明:本文为ldld原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ldld/p/10872574.html

JavaScript-[[prototype]]的另一种理解的更多相关文章

  1. JavaScript Date

    声明该文部分代码和内容节选自菜鸟教程,仅用作个人学习,特此声明链接:https://www.runoob.com/JavaScript Date日期对象用于处理日期和时间。先来几个练习实例:使用 Date() 方法获取当日日期使用...

  2. session + cookie 实现登录功能

    前端部分代码实现 1 <div id="mainCp"> 2 <div class="pos […]...

  3. 使用canvas保存网页为pdf文件支持跨域

    前言 之前上一篇随笔说了Canvas截图网页为图片,下来个新需求,把网页截图后保存为PDF文件供用户下载。 前 […]...

  4. javascript的this问题

      看过很多关于javascript中this指向的问题,现总结如下,如有不正确,欢迎指正。   javasc […]...

  5. JavaScript 交换数组元素位置的几种方式

    前言   交换数组元素位置是开发项目中经常用到的场景,总结下用过的几种方式。 第三方变量   最基础的方式,创 […]...

  6. 一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅

    《一统江湖的大前端》系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类 […]...

  7. js获取指定日期的下一天日期

    网上找的,这个加号有点不懂,先记下来 function dateAdd(startDate) {   star […]...

  8. ES6中的的Promise学习与实践

    1.前言   在平时的业务开发中,前端通常需要请求后台获取数据,或者NodeJs读取文件等等一系列的异步操作, […]...

随机推荐

  1. Intellij IDEA 添加jar包的三种方式

    项目引入了其他的lib包,我们原来的项目中没有lib包,只能自己引入,我是用了第二种方法,顺利引入: 一.直接 […]...

  2. SQLite数据库

    SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携 […]...

  3. Oracle导入、导出数据库dmp文件

    版本 1、实例数据完全导出 即导出指定实例下的所有数据 exp username/password@192.1 […]...

  4. 区块链技术生态持续优化,五大趋势不容忽视

    区块链技术生态持续优化,五大趋势不容忽视   区块链技术生态持续优化,五大趋势不容忽视      随着区块链被 […]...

  5. 推荐两个界面原型设计工具–GUIDesignStudio 和 Mockups For Desktop

    推荐两个界面原型设计工具–GUIDesignStudio 和 Mockups For Deskto […]...

  6. 敏学网————资料下载

    http://www.minxue.net...

  7. Autodesk Infrastructure Map Server(AIMS)/MapGuide API二次开发学习指南

    作者:杜长宇 – Autodesk开发技术顾问 2012年8月20日 Autodesk Infrastruct […]...

  8. FFT结果的物理意义【转】

    View Post FFT结果的物理意义【转】 FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有 […]...

展开目录

目录导航