专栏首页coding个人笔记重新认识原型和原型链二

重新认识原型和原型链二

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

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

function User() {};
console.log(User.prototype);

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

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

function User() {
}
User.prototype.name = 'wade';
var user = new User();
console.log(User.prototype);
console.log(user.__proto__);

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

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__

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上。虽然也可以打印出数据。

function User() {}
console.log(User.prototype);
console.log(User.__proto__);

(完)

本文分享自微信公众号 - coding个人笔记(gh_2ce38b49dae1),作者:wade

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重新认识原型和原型链三

    知道了显式原型prototype和隐式原型__proto__,我们就能很好的知道原型链是什么东西了。

    wade
  • 重新认识原型和原型链一

    之前分享过原型和原型链,那时候觉得理解的还行,最近重新理了一遍原型和原型链,发现当时理解的好粗浅。于是又重新学了一遍。可能这次学习的还是不到位,只是分享一些新的...

    wade
  • http、https、http2一些概念

    非对称加密,现在用的几乎都是非对称加密,自己有一个密钥对公钥和私钥,公钥可以给任何人知道,别人通过公钥加密发数据给自己,自己通过密钥解密。

    wade
  • 重新认识原型和原型链三

    知道了显式原型prototype和隐式原型__proto__,我们就能很好的知道原型链是什么东西了。

    wade
  • [JavaScript进阶]从JavaScript原型到面向对象

    首先给出结论,JavaScript 的本身是支持面向对象的,它本身具备着强大灵活的 OOP 语言能力。但是对于使用过基于类的语言 (如 Java 或 C++) ...

    用户1462769
  • Python教你挑选礼物

    又到了一年一度的教师节,每次教师节大家都会烦恼不知道送什么礼物?尤其是对于理工男来说,更是一个让人头大的问题。我今天就和大家分享一个用Python爬取商品信息的...

    stormwen
  • ES6常用语法总结

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准。因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 201...

    小周sri的码农
  • js原形链

    windseek
  • 微信公开课:看张小龙演讲的感悟!

    先说一下题外话,不知道你有没有发现呢,是不是觉得有什么不一样了呢?哈哈,机智如你一定发现了,咱们的头像更换了,今天花了很多时间想找个新的头像的,换来换去发现本月...

    良月柒
  • 世界旅游城市联合会在WTM主办 “智慧旅游城市最佳实例”论坛 ​| 数字文旅周报37期(11.11-11.17)

    ? 世界旅游城市联合会在WTM主办 “智慧旅游城市最佳实例”论坛 近日,2019年世界旅游交易会(WTM)开幕,隔天,世界旅游城市联合会作为WTM内容合作伙伴...

    腾讯文旅

扫码关注云+社区

领取腾讯云代金券