博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你们真的理解prototype和__proto__嘛?
阅读量:7209 次
发布时间:2019-06-29

本文共 1108 字,大约阅读时间需要 3 分钟。

前言

一般我们看到prototype就会下意识的说这不就是原型对象嘛?但是你们真的了解prototype嘛?就当你们很了解了,毕竟是基础知识,我就简单说说

正文

先说说工厂模式的由来吧,创建对象我们通常可以用new Object()或者直接对象字面量{}创建,但是要是对象之间又有其他共用的代码块又将如何呢?不错,这会造成大量的代码冗余,因为在JS的世界里没有接口的概念(ES5之前),我们平时在JS所说的类也并非实际意义上的类,很多类的特性JS都没有,我一般就把JS的类称为一个"另类",虽然ES6有了所谓的接口,但是万变不离其宗。扯得有点远啊,既然普通创建对象会造成冗余,那怎么避免呢?起初用的是工厂模式,如demo1所示:

demo1

function demo1 () {    this.name = 'mirok',    this.show = show}function demo2 () {    this.name = 'july',    this.show = show}function show () {    console.log(this.name)}var name = 'global'new demo1().show() //miroknew demo2().show() // julyshow() //global

虽然demo1解决了问题,但是这样写没有任何封装而言, show函数并不是引用类型特定能访问的,如demo1输出了global一样,为了解决此类问题,便有了原型模式,也就是你们经常用的prototype

demo2

function Demo2 () {}Demo2.prototype.show = function() {    console.log(this.name)}var obj1 = new Demo2()var obj2 = new Demo2()obj1.name = 'mirok'obj2.name = 'july'obj1.show() //mirokobj2.show() // july

网上有很多解释了__proto__和prototype的区别,还各自写了例子,虽然说了很多,也是解释得不清不楚。我们知道创建了一个函数就带了一个prototype属性,创建一个实例就带着一个[[prototype]]指针,这个指针是实例和构造函数的原型对象间的联系,这个指针在脚本中是不可见的,也就是你不能访问的,但是在Firefox、Safari 和 Chrome中,提供了__proto__来支持访问,这么一说,相信大家应该能明白吧

转载地址:http://yblum.baihongyu.com/

你可能感兴趣的文章
hdu 1728 逃离迷宫 *
查看>>
将Word文档转化为HTML格式的文档
查看>>
WCF
查看>>
IDE安装Lombok插件提高开发效率
查看>>
转://使用showplan.sql分析sql Performance
查看>>
第七课:增量分析
查看>>
【总结整理】JQuery基础学习---动画
查看>>
A. Round House_数学问题
查看>>
LeetCode OJ:Remove Nth Node From End of List(倒序移除List中的元素)
查看>>
0920编译原理词法分析
查看>>
浅谈数位DP的dfs写法
查看>>
Linux下的bash对拍
查看>>
C++ STL标准入门
查看>>
移动端页面制作2
查看>>
UE4中的常量材质实例和动态材质实例
查看>>
php中的字符串和正则表达式
查看>>
SharePoint获取UserProfile的信息
查看>>
[题解]第十一届北航程序设计竞赛预赛——I.神奇宝贝大师
查看>>
Python--关于连接符+
查看>>
office 所有后缀对应的 content-type
查看>>