博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于constructor 的理解
阅读量:5813 次
发布时间:2019-06-18

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

1 面试题再现

面试时遇到下面一段代码:

function A () {}  function B () {}  A.prototype = {    fun: function () {}  }  var a =new A ()  console.log(a.constructor === A)  console.log(A.prototype.constructor === A)  console.log(a.hasOwnProperty('constructor'))

大家猜到上面的结果是啥了吗?正确答案是 false false false

2 constructor原理

我们创建的每个函数都有一个prototype(原型)对象,这个属性是一个指针,指向一个对象。在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性是一个指向prototype属性所在函数的指针。当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(继承自构造函数的prototype),指向构造函数的原型对象。

但有一点我们是要注意的,当我们将构造函数的prototype设置为等于一个以对象字面量形式创建的新对象时,constructor属性不再指向该构造函数。

3 回归题目

该题目就是有了 对A的prototype的重新设置,导致A.prototype 不在指向A的构造函数。所以上面前两个都返回false。而constructor 是继承自prototype ,所以hasOwnProperty('constructor') 是false.

如果A.prototype重新赋值后希望constructor仍指向A的话,我们可以在字面对象里加一个constructor属性让它指向A。

A.prototype = {    fun: function () {},    constructor: A}

这样就可以返回true了

4 进阶题目

A.prototype = new B() var b = new A() console.log(b.constructor === A) console.log(B.prototype.constructor === A) console.log(b.constructor.prototype.constructor === A) console.log(b.hasOwnProperty('constructor'))

上面的都是返回false, 你答对了吗?

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

你可能感兴趣的文章
rabbitmq 在centos下的安装(实战)
查看>>
Spring中装配集合
查看>>
CSS字体中英文名称对照表 CSS常用中文字体英文名称对照表
查看>>
Fastreport.Net用户手册:报表选项
查看>>
PHP环境拓展mysql
查看>>
Spring Boot教程--Actuator监控介绍
查看>>
C# 方法参数
查看>>
VirtualBox 虚拟机Clone后网卡启动失败
查看>>
文件系统过滤驱动
查看>>
[Unity3d]安卓无法加载assetbundle的问题
查看>>
如何缓解双11光棍节物流爆棚之困。
查看>>
社区源码:如何搭建一个企业社区
查看>>
mybatis总结
查看>>
zabbix 自动注册和自动发现
查看>>
如何解决Ubuntu docker镜像无法使用man帮助文档的问题
查看>>
Elasticsearch JDBC的使用-MySQL 数据源导入和增量索引、更新
查看>>
关于Golang中database/sql包的学习笔记
查看>>
关于Redis的常识
查看>>
一个职场新人的求职总结
查看>>
GNS3 配置Dynamic Multipoint ***
查看>>