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

首先:综述一下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 以及 原型定义prototype
2.执行关健字 varnew 
3.执行persion1.aa();
    3.1 实例上是否有aa的定义 -> 有则执行aa || 无则到原型prototype上找aa并执行(此时由于最初的Person定义已被覆盖,
所以属姓sex已不存在了)               
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值