博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重新认识原型和原型链二
阅读量:5882 次
发布时间:2019-06-19

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

知道了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个人笔记 订阅号

转载于:https://juejin.im/post/5c88b0b1e51d457416596df7

你可能感兴趣的文章
c语言用尾插法新建链表和输出建好的链表
查看>>
Java基础学习总结(1)——equals方法
查看>>
高性能 Oracle JDBC 编程
查看>>
java 中ResultSet可以获取的数据类型及返回值类型列表
查看>>
ubuntu 13 安装SH程序
查看>>
支付宝升级延时到账功能
查看>>
ghost后只剩下一个盘的数据寻回方法
查看>>
输入输出练习
查看>>
Git commit message和工作流规范
查看>>
java面试。答案源于网上
查看>>
yii中取得CActiveDataProvider的分页信息
查看>>
我的大学
查看>>
Google翻译接口收费啦
查看>>
Debian+Apache2服务器
查看>>
MySQL库和表的操作
查看>>
shell编程:编译器、解释器 变量
查看>>
yum仓库一些简单介绍
查看>>
HashMap----工作原理
查看>>
nodejs 安装 postgresql module
查看>>
【转】iOS学习之iOS禁止Touch事件
查看>>