前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重新认识原型和原型链二

重新认识原型和原型链二

作者头像
wade
发布2020-04-24 10:20:38
1940
发布2020-04-24 10:20:38
举报
文章被收录于专栏:coding个人笔记coding个人笔记

知道了prototype这个原型(也叫原型属性、原型对象,不要搞混了,原型、原型属性、原型对象都是同一个东西),我们还需要知道__proto__和constructor两个属性。

先说说constructor属性,这个属性是函数独有的,而且是存在于原型prototype中,constructor指向函数对象。

代码语言:javascript
复制
function User() {};
console.log(User.prototype);

User是函数对象(也叫构造函数),所以User有prototype属性,prototype属性有constructor属性,constructor属性指向这个函数对象。于是出现了一个死循环,函数对象User的prototype属性下有constructor属性,而constructor属性指向函数对象User。你一直点开,会发现一直有constructor和prototype,没有尽头。但是这个属性具体有什么作用还没查到。

__proto__也叫隐式原型,指向构造函数的prototype。

代码语言:javascript
复制
function User() {
}
User.prototype.name = 'wade';
var user = new User();
console.log(User.prototype);
console.log(user.__proto__);

正是因为有隐式原型的存在,实例对象才能使用构造函数原型上一系列的方法和属性。

代码语言:javascript
复制
var time = new Date();
console.log(Date.prototype);
console.log(time.__proto__);
console.log(time.__proto__ === Date.prototype);

User和Date叫构造函数,user和time是实例对象,实例对象的隐式原型__prpto__指向创建出实例的构造函数的显示原型prototype。

除了null和undefined之外,所有的数据类型都有隐式原型__proto__

代码语言:javascript
复制
var a = 10;
var b = '10';
var c = true;
var d = {};
console.log(a.__proto__);
console.log(b.__proto__);
console.log(c.__proto__);
console.log(d.__proto__);

都是指向自己的数据类型,Number、String、Boolean,所以通过__proto__,实例对象可以使用构造函数的所有方法和属性。

有一点要特别注意,构造函数的隐式原型__proto__在显示原型prototype上。虽然也可以打印出数据。

代码语言:javascript
复制
function User() {}
console.log(User.prototype);
console.log(User.__proto__);

(完)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档