还在问什么是JavaScript构造函数、实例、原型对象以及原型链?看完这篇你就懂

2023-02-19 0 1,149

1简述

ES6,全名 ECMAScript 6.0,2015.06发版。在ES6以后,第两类并非如前所述类建立的,而要用两类称作缺省的特定表达式来表述第两类和它的特点。

2缺省

缺省是两类特定的表达式,主要用以调用第两类,即为第两类核心成员表达式赋常量,它总与 new 一同采用。他们能把第两类中许多公用的特性和形式抽出出,接着PCB到那个表达式里头。

//借助缺省建立第两类 function Person(uname, age){ this.uname = uname; this.age = age; this.sing = function(){ console.log(就要跳舞);} } var ldh = new Person(郭富城,18); var zxy = new Person(张国荣,19); console.log(ldh); ldh.sing(); zxy.sing();在 JS 中,采用缺省时要特别注意下列三点:

缺省用作建立某两类第两类,其第一个字母要小写缺省要和 new 一同采用才有象征意义(1)缺省继续执行操作过程

new 在继续执行时能做五件事:在缓存中建立两个捷伊空第两类。让 this 对准那个捷伊第两类。继续执行缺省里头的标识符,给那个新第两类加进特性和形式。回到那个新第两类(因此缺省里头不须要 return )。

(2)缺省的核心成员

JavaScript 的缺省中能加进一些核心成员,能在缺省这类上加进,也能在缺省外部的 this 上加进。透过这三种形式加进的核心成员,就依次称作动态核心成员和示例核心成员。

动态核心成员:在缺省卷上加进的核心成员称作动态核心成员,根本无法由缺省这类来出访//动态核心成员在缺省这类上加进的核心成员 sex 是动态核心成员//动态核心成员根本无法透过缺省来出访Person.sex =男; console.log(Person.sex);示例核心成员:在缺省外部建立的第两类核心成员称作示例核心成员,根本无法由示例化的第两类来出访function Person(uname){ this.uname = uname;}示例核心成员是缺省外部透过this加进的核心成员 uname就是示例核心成员3缺省蓝本prototype

缺省透过蓝本重新分配的表达式是大部份第两类所共享资源的。JavaScript 明确规定,每两个缺省都有两个 prototype 特性,对准另两个第两类。特别注意那个 prototype 是两个第两类,那个第两类的大部份特性和形式,单厢被缺省所保有。他们能把这些维持不变的形式,间接表述在 prototype 第两类上,这样大部份第两类的示例就能共享资源这些形式。

function Person(uname, age){ this.uname = uname; this.age = age;// this.sing = function(){ // console.log(就要跳舞);//} }//一般情况下,他们的公用特性表述到缺省里头,公用的形式他们放到蓝本第两类身上 Person.prototype.sing = function(){ console.log(就要跳舞);} var ldh = new Person(郭富城,18); var zxy = new Person(张国荣,19); console.log(ldh.sing === zxy.sing);//true ldh.sing(); zxy.sing();蓝本是甚么? 两个第两类,他们也称作 prototype 为蓝本第两类。蓝本的作用是甚么? 共享资源形式。

4第两类蓝本 proto

第两类单厢有两个特性 proto 对准缺省的 prototype 蓝本第两类,之因此他们第两类能采用缺省 prototype 蓝本第两类的特性和形式,是因为第两类有proto蓝本的存在。

function Person(uname, age){ this.uname = uname; this.age = age;} Person.prototype.sing = function(){ console.log(就要跳舞);} var mingo = new Person(小明,18); var zxy = new Person(张国荣,19); mingo.sing(); console.log(mingo);//第两类身上系统自己加进两个 proto 对准他们缺省的蓝本第两类 prototype console.log(mingo.proto === Person.prototype);//trueproto第两类蓝本和蓝本第两类prototype是等价的(如图箭头对准,mingo是Person缺省建立出的两个第两类示例,那个第两类示例的蓝本(proto),是Person缺省的蓝本第两类prototype。)proto第两类蓝本的象征意义就在于为第两类的查找机制提供两个方向,或者说一条路线,但是它是两个非标准特性,因此实际开发中,不能采用那个特性,它只是外部对准蓝本第两类 prototype

还在问什么是JavaScript构造函数、实例、原型对象以及原型链?看完这篇你就懂

5constructor 缺省

第两类蓝本 proto和缺省prototype蓝本第两类(其实指的是同两个)里头有两个特性 constructor 特性,constructor 他们称作缺省,因为它指回构造函数这类。

还在问什么是JavaScript构造函数、实例、原型对象以及原型链?看完这篇你就懂

constructor 主要就用作记录该第两类引用作哪个缺省,它能让蓝本第两类重新对准原来的缺省。一般情况下,第两类的形式都在缺省的蓝本第两类中设置。如果有多个第两类的形式,他们能给蓝本对象采取第两类形式赋值,但是这样就会覆盖缺省蓝本第两类原来的内容,这样修改后的蓝本第两类 constructor 就不再对准当前缺省了。此时,他们能在修改后的蓝本第两类中,加进两个 constructor 对准原来的缺省。

function Person(uname, age){ this.uname = uname; this.age = age;} //很多情况下,他们须要手动的借助constructor 那个特性指回原来的缺省 Person.prototype ={ //如果他们修改了原来的蓝本第两类,给蓝本第两类赋值的是两个第两类,则必须手动的借助constructor指回原来的构造函数 constructor: Person, sing: function(){ console.log(就要跳舞);}, movie: function(){ console.log(就要演电影);} } var mingo = new Person(小明,18); var zxy = new Person(张国荣,19); console.log(Person.prototype); console.log(mingo.proto); console.log(Person.prototype.constructor); console.log(mingo.proto.constructor);6蓝本链

每个缺省都有两个蓝本第两类,蓝本第两类都包含两个对准缺省的指针,而示例都包含两个对准蓝本第两类的外部指针。那么假如他们让蓝本第两类等于另两个类型的示例,结果会怎样?显然,此时的蓝本第两类将包含两个对准另两个蓝本的指针,相应地,另两个蓝本中也包含着两个对准另两个缺省的指针。假如另两个蓝本又是另两个类型的示例,那么上述关系依然成立。如此层层递进,就构成了示例与蓝本的链条。这是所谓的蓝本链的基本概念。——摘自《javascript高级程序设计》

function Person(uname, age){ this.uname = uname; this.age = age;} Person.prototype.sing = function(){ console.log(就要跳舞);} var mingo = new Person(小明,18);//1.只要是第两类就有proto 蓝本,对准蓝本第两类 console.log(Person.prototype); console.log(Person.prototype.proto === Object.prototype);//true //2.他们Person蓝本第两类里头的proto蓝本对准的是 Object.prototype console.log(Object.prototype.proto);//3.他们Object.prototype蓝本第两类里头的proto蓝本对准为 null console.log(Object);Object 是 JavaScript 中最顶级的第两类,其它大部份第两类都是如前所述它的,包括你建立的函数

还在问什么是JavaScript构造函数、实例、原型对象以及原型链?看完这篇你就懂

7JavaScript 的核心成员查找机制(如前所述蓝本链规则)

当出访两个第两类的特性(包括形式)时,首先查找那个第两类自身有没有该特性。如果没有就查找它的蓝本(也是 proto对准的 prototype 原型第两类)。如果还没有就查找蓝本第两类的蓝本(Object的蓝本第两类)。依此类推一直找到 Object 为止(null)。 proto第两类蓝本的象征意义就在于为第两类核心成员查找机制提供两个方向,或者说一条路线。

8蓝本第两类this对准

1缺省中的this 对准他们示例第两类2蓝本第两类里头放的是形式,那个形式里头的this 对准的是那个形式的调用者,也是那个示例第两类

function Person(uname, age){ this.uname = uname; this.age = age;} var that; Person.prototype.sing = function(){ console.log(就要跳舞); that = this; console.log(this);} var mingo = new Person(小明,18);//1.在缺省中,里头this对准的是第两类示例 mingo //2.蓝本第两类表达式里头的this 对准的也是示例第两类 mingo mingo.sing(); console.log(that === mingo);//true

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务