安卓 on a null object reference_详解Object.prototype.__proto__

Object.prototype 的 __proto__ 属性是一个访问器属性(一个getter函数和一个setter函数), 暴露了通过它访问的对象的内部[[Prototype]] (一个对象或 null)。

使用__proto__是有争议的,也不鼓励使用它。因为它从来没有被包括在EcmaScript语言规范中,但是现代浏览器都实现了它。__proto__属性已在ECMAScript 6语言规范中标准化,用于确保Web浏览器的兼容性,因此它未来将被支持。它已被不推荐使用, 现在更推荐使用Object.getPrototypeOf/Reflect.getPrototypeOf 和Object.setPrototypeOf/Reflect.setPrototypeOf(尽管如此,设置对象的[[Prototype]]是一个缓慢的操作,如果性能是一个问题,应该避免)。

__proto__ 属性也可以在对象文字定义中使用对象[[Prototype]]来创建,作为Object.create()的一个替代。

ad4e9bc54b9c39393e45508c01a3f70b.png

语法:

let Circle = function () {};let shape = {};let circle = new Circle(); // 设置该对象的原型链引用// 过时且不推荐使用的。这里只是举个例子,尽量不要在生产环境中这样做。shape.__proto__ = circle;// 判断该对象的原型链引用是否属于circleconsole.log(shape.__proto__ === circle); // true
let shape = function () {};let p = {    a: function () {        console.log('aaa');    }};shape.prototype.__proto__ = p;let circle = new shape();circle.a();//aaaconsole.log(shape.prototype === circle.__proto__);//true//或者let shape = function () {};var p = {    a: function () {        console.log('a');    }};let circle = new shape();circle.__proto__ = p;circle.a(); //  aconsole.log(shape.prototype === circle.__proto__);//false//或者function test() {}test.prototype.myname = function () {    console.log('myname');}let a = new test()console.log(a.__proto__ === test.prototype);//truea.myname();//myname//或者let fn = function () {};fn.prototype.myname = function () {    console.log('myname');}let obj = {    __proto__: fn.prototype};obj.myname();//myname

注意:这是两个下划线,后面是五个字符的 “proto” ,后面再跟两个下划线。

1370ec812f45996ccc4329000ba48a4b.png

__proto__的读取器(getter)暴露了一个对象的内部 [[Prototype]] 。对于使用对象字面量创建的对象,这个值是 Object.prototype。对于使用数组字面量创建的对象,这个值是 Array.prototype。对于functions,这个值是Function.prototype。对于使用 new fun 创建的对象,其中fun是由js提供的内建构造器函数之一(Array, Boolean, Date, Number, Object, String 等等),这个值总是fun.prototype。对于用js定义的其他js构造器函数创建的对象,这个值就是该构造器函数的prototype属性。

__proto__ 的设置器(setter)允许对象的 [[Prototype]]被变更。前提是这个对象必须通过Object.isExtensible() 判断为是可扩展的,如果不可扩展,则会抛出一个 TypeError 错误。要变更的值必须是一个object或null,提供其它值将不起任何作用。

要理解原型如何被使用,请查看相关文章:Inheritance and the prototype chain。

.__proto__属性是Object.prototype 一个简单的访问器属性,其中包含了get(获取)和set(设置)的方法,任何一个__proto__的存取属性都继承于Object.prototype,但一个访问属性如果不是来源于Object.prototype就不拥有.__proto__属性,譬如一个元素设置了其他的.__proto__属性在Object.prototype之前,将会覆盖原有的Object.prototype。

为了更好的支持,建议只使用 Object.getPrototypeOf()。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot】服务器JVM远程调试

目的 当系统部署到测试环境服务器时,难免会遇到bug。这个时候如果能远程调试,那么能够大大提高我们的生产效率,快速完成服务调试,最快发布生产环境。(领导好评不就到手了) 准备 Idea(Java最好…

图说:为什么Java中的字符串被定义为不可变的

转载自 图说:为什么Java中的字符串被定义为不可变的字符串,想必大家最熟悉不过了,通常我们在代码中有几种方式可以创建字符串,比如:String s "Hollis";这时,其实会在堆内存中创建一个字符串对象…

值得推荐的微软技术公众号推荐

为开阔技术人眼界,促进技术人职业成长。小二在此诚意推荐最值得关注的微软技术公众号。平时关注推送的文章或多或少要么学到知识技能,要么收到一些启发,有利于个人成长。这些公众号为笔者个人积累,不一定都合大家口味,…

springboot:BeanPostProcessor示例及分析

【README】 1,本文主要分析 BeanPostProcessor 的作用, 开发方式; 2,BeanPostProcessor 是bean后置处理器, 简而言之就是bean被创建好了,之后如果需要对其属性进行修改,则 需要使用 BeanPost…

实现了某一个接口的匿名类的例子_java中的内部类内部接口详解,一文搞定

简介一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口。内部类先讲内…

Java 8 日期和时间解读

转载自 Java 8 日期和时间解读现在,一些应用程序仍然在使用java.util.Date和java.util.Calendar API和它们的类库,来使我们在生活中更加轻松的处理日期和时间,比如:JodaTime。然而,Java 8 引进的新的类库来处理日期和时…

云计算产值将超3000亿美元 亚马逊微软谷歌居三甲

腾讯科技讯 3月27日消息,据外电报道,云计算曾经主要是无法承担建造和维护基础设施的初创公司的解决方案,但对于管理数字业务的大型企业而言,云计算正快速成为省钱的管理数字业务的方式。市场调研公司IDC在上月的一份调查数据显示&…

oracle中join另一个表后会查询不出一些数据_面试必备 | 8个Hive数据仓工具面试题锦集!...

是新朋友吗?记得先点蓝字关注我哦~今日课程菜单Java全栈开发 | Web前端H5大数据开发 | 数据分析人工智能Python | 人工智能物联网进入数据时代,大数据技术成为互联网发展的核心要素之一。与此同时大数据开发工程师的薪资也成为行业内高薪的代…

springboot-Initializer例子及分析

【README】 1,本文主要编写了 初始化器例子并分析了其调用路径; 2,初始化器的执行顺序 先于 后置处理器; 后置处理器,refer2 springboot:BeanPostProcessor示例及分析_PacosonSWJTU的博客-CSDN博客【RE…

ASP.NET 开发人员不必担心 Node 的五大理由

哦别误会……我真的很喜欢 Node,而且我觉得它提出的概念和模式将在很长一段时间内,对服务端 Web 编程产生深远的影响。即使随着时间的推移 Node 过气了,我们肯定可以从下一个牛逼玩意身上或多或少的感觉到它的影响(不管好的和/或坏的)。而在这…

Spring Boot面试题

转载自 Spring Boot面试题 Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家。问题一 Spring Boot、Spring MVC 和 Spring 有什么区别? SpringFrameSpringFramework 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就…

synchronized原理_Java并发编程 -- synchronized保证线程安全的原理

线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案&#xff0…

转:Java 7 种阻塞队列详解

转自: Java 7 种阻塞队列详解 - 云社区 - 腾讯云队列(Queue)是一种经常使用的集合。Queue 实际上是实现了一个先进先出(FIFO:First In First Out)的有序表。和 List、Set ...https://cloud.tencent.com/de…

微软Build 2016前瞻:让开发者编写能畅行所有设备的app

本周三,5000名软件开发者将齐聚旧金山莫斯康展览中心参加微软公司年度开发者大会(Build 2016),和往年一样,微软在大会上发布了一系列新的技术支持。 据透露,微软将会让开发人员编写可以在任何Windows设备上…

XSS的那些事儿

转载自 XSS的那些事儿XSS是什么XSS,Cross-site scripting,跨站脚本攻击,为了区分与CSS,起名为XSS。黑客利用网站的漏洞,通过代码注入的方式将一些包含了恶意攻击脚本程序注入到网页中,企图在用户加载网页时…

js 时间戳转换成时间_JavaScript 时间戳转成日期格式

我们在开发中经常需要把时间戳转化成日期格式,但 JavaScript 本身自带的 Date 方法并不像 PHP date 的那么强大。因此,我们就需要自己动手写一个方法。首先我们要先了解下需要用到的 JavaScript 自带的 Date 对象的方法:getDate:获…

java阻塞队列小结

【README】 1,本文介绍了java的7个阻塞队列; 2,阻塞队列的作用 做缓冲作用,如缓冲kafka消息,而不是直接发送给kafka,减少kafka集群的压力;【1】阻塞队列 BlockingQueue 概述 1,队…

来自.NET FM的感谢信

掐指一算,我们的播客 .NET FM 已经上线一周了!!!不过瞅下节节攀升的流量,二位主播一边感叹 .NET 中文社区的热情,一边摸了摸瘪下去的荷包: • 首日访问 > 2000人次 • 五日访问 > 5000人次…

并发场景下MySQL存在的问题及解决思路

转载自 并发场景下MySQL存在的问题及解决思路 目录1、背景2、表锁导致的慢查询的问题3、线上修改表结构有哪些风险?4、一个死锁问题的分析5、锁等待问题的分析6、小结 一、背景对于数据库系统来说在多用户并发条件下提高并发性的同时又要保证数据的一致性一直是数据…

python queue 生产者 消费者_【python】-- 队列(Queue)、生产者消费者模型

队列(Queue)在多个线程之间安全的交换数据信息,队列在多线程编程中特别有用队列的好处:提高双方的效率,你只需要把数据放到队列中,中间去干别的事情。完成了程序的解耦性,两者关系依赖性没有不大。一、队列的类型&…