____proto____、prototype、constructor以及new
____proto____、prototype、constructor以及new
____proto____、prototype、constructor的简述
首先,我们必须要清楚,____proto____、constructor是对象特有的,而prototype是函数特有的,因此对象是不存在prototype的,而因为函数也是一个对象,所以函数也有____proto____、constructor。
proto
它是形成原型链的关键,该属性的作用是,当访问一个属性时,倘若在该对象上没找到对应的属性,则会通过____proto____去查询该对象的父对象(该对象的构造函数的原型prototype),以此类推,而null是原型链的终点,若原型链上都找不到对应的则报错或返回undefine。
prototype
它是函数所特有的原型,意义是使得所有的实例对象共有的公共属性和方法。
- constructor
它指向该对象的构造函数,也可用它来分辨变量类型,构造函数中有prototype,prototype也有指向constructor。
通过new来巩固____proto____、prototype、constructor
|
如果你能完全知道并理解上诉代码的输出结果,那么你应该掌握了____proto____、prototype、constructor以及new的内涵,接下来我们一起来看看new究竟做了什么,以及f1和F之间的关系,和这些输出结果的原因!
首先,我们来看看new这个关键字它做了什么操作
|
通过new关键字的操作我们可以发现
- 倘若构造函数不返回对象,那么实例对象的____proto____指向构造函数的原型,并且构造函数中倘若出现this.×××=×××,其实是在给实例对象创建新的属性。!!!构造函数中的this不指向prototype!,this指向要看它最终的函数引用,这里构造函数的this指向创建的实例对象obj!
- 倘若构造函数返回对象,那么实例对象即为新创建的对象!
让我们再来看看上面代码的输出(以下为第一种情况下的,即构造函数不返回对象)
|
最后我们来一副图来搞清楚f1和F中的关系(该图来源于(17条消息) 帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)_码飞_CC的博客-CSDN博客_js prototype)(不懂的可以到该文章继续学习!!!)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HzmBlog!