首页 > 其他分享 >原型 prototype __proto__

原型 prototype __proto__

时间:2022-08-17 18:44:24浏览次数:55  
标签:__ Function proto Person prototype 构造函数

原型

概念:每一个构造函数天生自带一个属性为 prototype 对象,是一个对象数据类型,里面可以存放对应的数据 称为显示原型 且唯一

一般把方法放在原型里,属性放在构造函数里

当自定义构造函数书写完毕后,就会有 prototype 产生

概念:每一个对象天生自带一个__proto__属性,也是一个对象空间,指向对象所属构造函数的prototype,称为隐式原型

function Person()
{
    Person.prototype.a = 100;
    Person.prototype.say = function(){
    console.log("hello");
    }
}
​
var p1 = new Person();
​
//person找不到a,则会去构造函数的prototype里找
console.log(p1.a);  //100
p1.say(); // hello
​
console.log(Person.prototype);
//判断一个对象是否指向了该构造函数的原型对象
console.log(Person.prototype.isPrototypeOf(p1));// true
​
//创建的对象的自带属性__proto__ 指向构造函数的 prototype对象
console.log(p1.__proto__);
​
//指向的意思就是说是同一个东西
console.log(p1.__proto__ == Person.prototype); //true
console.log(p1.__proto__ === Person.prototype); //true

总结

  • 实例对象的__proto__是指向对应构造函数的prototype

  • 在实际使用中,一般不会使用 __proto__,而是通过 __proto__访问对应的prototype

问题1:实例对象的 __proto__ 指向谁?

  => 指向所属构造函数的 prototype

  => p1 所属的构造函数是 Person

  => p1.__proto__ 指向 Person.prototype

问题2:(构造函数)Person.prototype 的 __proto__ 指向谁?

  => Person.prototype 是一个对象数据类型( Object )

  => 在 JS 内所有的 object 数据类型都是属于 Object 这个内置构造函数的

  => 所以 Person.prototype 属于 Object 这个内置构造函数

  => 所以 Person.prototype 的 __proto__ 指向 Object.prototype

问题3:(构造函数)Person 的 __proto__ 指向谁?

  => Person 是一个函数,函数本身也是一个对象,所以也有 __proto__

  => 如果Person 有父类,则指向父类的原型prototype

  => 在 JS 内,所有函数都是属于内置构造函数 Function 的实例

  => 所以 Person.__proto__ 指向 Function.prototype

问题4:Object.prototype 的 __proto__ 指向谁?

  => Object.prototype 是一个对象数据类型,只要是对象,都是属于 Object 这个内置构造函数的

  => 注意:Object.prototype 在 JS 内叫做顶级原型,不在有 __proto`__`,指向null

问题5:Object 的 __proto__ 指向谁?

  => Object 是一个内置构造函数,也是一个函数,也是一个对象

  => 在 JS 内,所有的函数都是属于内置构造函数 Function 的实例

  => Object 也是 Function 的实例

  => 所以Object.__proto__ 指向 Function.prototype

问题6:Function.prototype 的 __proto__ 指向谁?

  => Function.prototype 也是一个对象数据类型

  => 只要是对象数据类型都是 Object 的实例

  => 所以 Function.prototype 的 __proto__ 指向 Object.prototype

问题7:Function 的 __proto__ 指向谁?

  => Function 也是一个内置构造函数,也是一个函数

  => 在 JS 内,所有的函数都是属于内置构造函数 Function 的实例

  => Function 是 自己的构造函数,自己的实例对象

  => 所以 Function 所属的构造函数时Function

  => 所以 Function.__proto__ 指向 Function.prototype

标签:__,Function,proto,Person,prototype,构造函数
From: https://www.cnblogs.com/yule-i7/p/16596391.html

相关文章

  • Unity获取脚本的CustomEditor(自定义编辑)数据
    在此之前,粗略的介绍下CustomEditor(自定义编辑)。Unity对于我们创建的Mono脚本提供了属性面板的展示和修改。默认情况下,Inspector面板中会显示当前脚本类的公开字段(publi......
  • redis实现消息队列的几种方式及其优劣
    redis实现消息队列的几种方式及其优劣衡与墨已于2022-04-2720:46:32修改5617收藏24分类专栏:redis精华文章标签:redispub-substream消息队列版权redis同时被......
  • idea 中创建 web 项目(搭配 Tomcat 使用)
    下面展示如何在IDEA中创建一个web项目,并用Tomcat服务器来启动该项目。1. 创建一个web项目创建一个空项目:File→New →Project →EmptyProject →Next......
  • 华为应用市场APP上架流程
      怎么将开发好的App上传到华为应用市场呢,下面给大家讲解一下上架流程,供大家参考;    首先进入华为开发者联盟官网https://developer.huawei.com/,注册账号,并进行......
  • JSP和servlet之间的相互传值
    1.从一个jsp页面跳转到另一个jsp页面时的参数传递(1)使用request对象获取客户端提交的信息login.jsp页面代码如下:点击查看代码<%@pagelanguage="java"import="java......
  • CF1719C Fighting Tournament 题解
    思路根据题意,很容易看出,每个人都完成一次比赛后,即完成\(n-1\)轮之后,力量值最大的人会留在第一的位置,且在第\(n-1\)轮完成后,除了力量值最大的人,其他人的胜场数都不会再......
  • Linux-进程管理(1)Linux进程睡眠状态 disk sleep (kill -9 杀不掉D状态进程)
    参考文档Linux进程睡眠状态disksleep1.Linux进程状态Running(R):运行或将要运行Interruptible(S):被阻断而等待一个事件,可能会被一个信号**Uninterruptible(D):被阻......
  • Python 字符串插值 All In One
    Python字符串插值AllInOne#!/usr/bin/envpython3#coding=utf-8__author__='xgqfrms'__editor__='vscode'__version__='1.0.1'__copyright__="""Co......
  • CF1719A Chip Game 题解
    题目传送门。思路当其中一个人不能动的时候,这个人一定位于点\((n,m)\)上。令点\((n,m)\)为终点。当\(n\)和\(m\)都是奇数或当\(n\)和\(m\)都是偶数时,赢的人......
  • CF1719B Mathematical Circus 题解
    一道不错的构造题。思路先说一句废话,能被\(4\)整除的数在除以\(2\)之后得到的数还是一个偶数。我们可以根据\(k\)的奇偶性以及\(k\)除以\(2\)之后的奇偶性分......