您的位置:首页 > Web前端 > JavaScript

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

2015-11-09 12:01 627 查看

首先:综述一下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.执行关健字 var 、new
3.执行persion1.aa();
3.1 实例上是否有aa的定义 -> 有则执行aa || 无则到原型prototype上找aa并执行(此时由于最初的Person定义已被覆盖,
所以属姓sex已不存在了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: