示例详解JavaScript解析器的执行过程

来源:互联网 发布:手机淘宝怎样看到退货 编辑:程序博客网 时间:2024/06/06 02:03

首先:综述一下js解析器的执行过程

同作域解析顺序 1先定义->2再执行
执行调用顺序 1实例->2原型->3父原型

示例1

//示例1:          function Person(name){ //1.定义一个类或就是称为函数     this.sex = '男';     this.name="我是基类的name";     this['aa']=function(){ //2.在实例上定义一个方法          console.log('这是在类实例上定义的方法:'+this.name+" "+this.sex);     }}Person.prototype.aa=function(){  //3.在原型上定义一个方法    console.log('这是在原型上定义的方法:'+this.name+" "+this.sex)}//4.调用类var person1=new Person('Byron');                                person1.aa();

输出

这是在类实例上定义的方法:我是基类的name

javascript解析器,工作详解

1.先执行定义关健字 function 以及 原型定义prototype
2.执行关健字 var 、new
3.执行persion1.aa();
3.1 实例上是否有aa的定义-> 有则执行aa || 无则到原型prototype上找aa并执行

示例2:

function Person(name){ //1.定义一个类或就是称为函数    this.sex = '男';    this.name="我是基类的name";    this['aa']=function(){ //2.在实例上定义一个方法         console.log('这是在类实例上定义的方法:'+this.name+" "+th    }}Person.prototype.aa=function(){  //3.在原型上定义一个方法    console.log('这是在原型上定义的方法:'+this.name+" "+this.sex}//4.调用类var person1=new Person('Byron');                                person1.aa();function Person(name){ //5.覆盖上面函数Person的定义    this.name='我是子类的name';}

输出

这是在原型上定义的方法:我是子类的name undefined

#

javascript解析器,工作详解

#

1.先执行定义关健字 function 以及 原型定义prototype2.执行关健字 varnew 3.执行persion1.aa();    3.1 实例上是否有aa的定义 -> 有则执行aa || 无则到原型prototype上找aa并执行(此时由于最初的Person定义已被覆盖,所以属姓sex已不存在了)               
0 0
原创粉丝点击