首页 > 其他分享 >prototype和__proto__和constructor之间的关系

prototype和__proto__和constructor之间的关系

时间:2022-11-10 22:01:37浏览次数:36  
标签:__ proto Person person 原型 constructor prototype 构造函数

深入理解原型 到原型链

探究

prototype  __proto__  constructor

构造函数创建对象

我们知道我们可以直接定义对象 或者可以用 构造函数的方法创建对象

function Person() {

}
var person = new Person();
person.name = 'kkkl';
console.log(person.name) //kkkl

prototype

每个函数都有一个prototype属性

function Person(){

}
//prototype是函数才会有的属性
Person.prototype.name='kkkl';
var person1=new Person();
var person2=new Person();
console.log(person1.name)//kkkl
console.log(person2.name)//kkkl

那这个函数prototype 指向的是什么呢

函数的prototype属性指向了一个对象,这个对象正是构造函数创建的实例的原型

也就是这个例子中的person1和person2的原型

现在我们就知道什么是原型了 (原型就是prototype指向的对象 这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。)

可以用一张图便是构造函数和实例原型之间的关系‘

image-20221110213317978

那我们该怎么表示实例与实例原型之间的关系呢 ,也就是person 和Person.prototype 的关系

这时候就会出现第二个属性

__proto__

每个javascript对象(除了null)都具有一个属性,叫做

__proto__

这个属性会指向该对象的原型。

实例

function Person() {

}
var person = new Person();
console.log(person.__proto__ === Person.prototype); // true

现在来更新上面的图片

image-20221110213803564

那既然 实例对象个构造函数都可以指向原型 那么原型是否有属性指向构造函数或者实例呢

constructor

这个可以指向构造函数

每个原型都有一个constructor属性指向关联的构造函数

function Person() {

}
console.log(Person === Person.prototype.constructor); // true

image-20221110214108903

function Person() {

}

var person = new Person();

console.log(person.__proto__ == Person.prototype) // true
console.log(Person.prototype.constructor == Person) // true

参考

https://gist.github.com/sttk/9e83d802c4a1a2f24fab807b0644a8db

标签:__,proto,Person,person,原型,constructor,prototype,构造函数
From: https://www.cnblogs.com/kkkkl/p/16878930.html

相关文章

  • Http基础协议
    浏览器请求方法http1.0定义了三种:GET:向服务器获取资源,比如常见的查询请求POST:向服务器提交数据而发送的请求Head:和get类似,返回的响应中没有具体的内容,用于获......
  • 计算机结构--week5
    内存特征:  计算机中的内存: Capacity:Thecapacityofthememoryisthenumberofbytes(orpreferablywords)itcanstore. Thewordsize(orlength)......
  • 15.面向对象
    面向对象面向对象(ObjectOrientedProgramming)几乎是目前所有主流语言所必备的特点。什么是面向对象呢?回答这个问题,需要先明白另一个问题:什么是对象?什么是对象程序的本......
  • Java学习——11.10
    今天得时间都花在数学和英语上了,Java的话就只看了一点对象和内存的关系,但我觉得够了。这章虽然狂神讲的很浅,又因我没怎么学过数据结构,于是我又从CSDN上看了点。下面来......
  • SecureCRT 用SSH端口转发设置
    一、新建连接......
  • 内核优化常见参数
    001、大页内存管理建议:关闭TransparentHugePages:大页内存管理,不过他和标准的大页内存管理有区别。TransparentHugePages是在运行时动态分配内存的,而标准的HugePages是......
  • 不修改数组找出重复的数字
    14.不修改数组找出重复的数字题给定一个长度为n+1的数组nums,数组中所有的数均在1∼n的范围内,其中n≥1。请找出数组中任意一个重复的数,但不能修改输入的数组。数据......
  • Android开发Compose版本、Kotlin 版本、KSP版本版本对应关系
    Android开发Compose版本、Kotlin版本、KSP版本版本对应关系是要遵循官方给出的,不然容易出锅甚至编译都不过,即使编译通过也可能导致潜在崩溃ComposeCompiler版本和兼......
  • 【2022.11.10】luffy项目部署(6)
    内容概要1.首页中间部分样式2.多方式登录接口2.1视图类2.2序列化类2.3路由3.手机号是否存在接口3.1视图类4.腾讯云短信介绍和申请4.1什么是api,什么是sd......
  • Open Cascade 获取面的内外环线
    ​1.简介在特定应用场景下,需要对于一个拓扑面(TopoDS_Face)其进行补洞或打洞操作,如下图所示。补洞或打洞过程中需要获取面的环线(TopoDS_Wire),本文即介绍如何获取拓扑面的环......