23.JavaScript原型和原型链

1.原型:prototype,所有的函数都有一个属性prototype,称之为函数原型

默认情况下,prototype是一个普通的Object对象

默认情况下,prototype中有一个属性constructor,它也是一个对象,它指向构造函数本身

function Test(){}

Test.prototype:函数Test的原型

Test.prototype.constructor:函数Test的原型的构造函数指向Test

(Test.prototype.constructor === Test)  结果为true

2.隐式原型:__proto__,所有的对象都有一个属性__proto__,称之为隐式原型

默认情况下,隐式原型指向创建该对象的,函数的原型

function Test(){}

var test = new Test();

(test.__proto__ === Test.prototype) 结果为true

上面的test对象如何获得创建对象的构造函数名称?

test.__proto__.constructor.name

test.__proto__ === Test.prototype

test.__proto__.constructor === Test.prototype.constructor === Test

test.__proto__.constructor.name === Test.prototype.constructor.name === Test.name

如上图所示:

通过函数add创建的对象,这些对象的隐式原型都指向函数add的原型

对象1.__proto__ === 对象2.__proto__ === add.prototype

所以add.prototype是对象1和对象2的一块公共区域

3.原型链

原型链,链条的全貌:

上图中的Function特殊,是JS引擎自己产生的

Function.__proto__ === Function.prototype

Object.prototype === null

所有的函数都是通过new Function()产生的。

所以,自定义函数.__proto__ === Function.prototype

当访问一个对象的成员时:

1. 看该对象自身是否拥有该成员,如果有直接使用

2. 在原型链中依次查找是否拥有该成员,如果有直接使用

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

js继承的几种方式

1.原型链继承原型链继承:想要继承,就必须要提供父类(继承谁,提供继承的属性)//父级functionPerson(name)//给构造函数添加参数this.namename;this.age10;this.sumfunction()console.log(this.name)//原

前端学习重点-原型与原型链

原文链接:什么是原型?每一个函数都包含一个prototype属性,这是一个指针指向"原型对象"(prototypeobject),也就是我们平时说的原型。每一个函数都包含不同的原型对象。当将函数用作构造函数的时候,新创建的对象(实例)会从原型对象上继承属性

JS数据类型的几种判断方法

1.typeof(常用)typeof是一个运算符,返回值是一个字符串,用来说明变量的数据类型,可以用来判断number,string,object,boolean,function,undefined,symbol这七种类型.2.instanceof(知道即可)instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上,返回值为布尔值,用于指示一个变量是否属于某个对象的实例3.Object.prototype.to

Js中 constructor, prototype, __proto__ 详解

本文为了解决以下问题:__proto__(实际原型)和prototype(原型属性)不一样!!!constructor属性(原型对象中包含这个属性,实例当中也同样会继承这个属性)prototype属性(constructor.prototype原型对象)__proto__属性(实例指向原型对象的指针)<br/首先弄清楚几个概念:<br/

JS函数高级

原型与原型链所有函数都有一个特别的属性:prototype:显式原型属性所有实例对象都有一个特别的属性:__proto__:隐式原型属性显式原型与隐式原型的关系函数的prototype:定义函数时被自动赋值,值默认为{},即用为原型对象