有关JS中原型链及prototype和__proto__

半世苍凉 提交于 2020-03-20 20:06:57

原文:https://www.cnblogs.com/zlq92/p/10178286.html

 

一、prototype和 _proto_ 的概念 

prototype是函数的一个属性(每个函数都有一个prototype属性),这个属性是一个指针,指向一个对象;显示修改对象的原型的属性。

_ proto_ 是一个对象拥有的内置属性,是JS内部使用寻找原型链的属性,简单来说,在 javascript 中每个对象都会有一个 _ proto _ 属性,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去 _ proto _ 里找这个属性,这个 _ proto _ 又会有自己的 _ proto _,于是就这样一直找下去,也就是我们平时所说的原型链的概念. 

 二、有关于new 的过程

1 var Person = function(){};
2 var p = new Person();
3 
4 //*new的过程拆分成以下三步:*
5 //(1) var p={}; 也就是说,初始化一个对象p;
6 //(2) p. __ proto __ = Person.prototype;
7 //(3) Person.call(p); 也就是说构造p,也可以称之为初始化p8 //实例化对象p的—proto—属性===构造函数Person的prototype属性

 三、示例

 

1 var Person = function(){};
2 Person.prototype.sayName = function() {
3     alert("My Name is Jacky");
4 };
5 
6 Person.prototype.age = 27;
7 var p = new Person();
8 p.sayName();

 

p是一个引用指向Person的对象。我们在Person的原型上定义了一个sayName方法和age属性,当我们执行p.sayName( )时,会先在this的内部查找(也就是构造函数内部),如果没有找到然后再沿着原型链向上追溯。 

// 使用_ proto _属性来链接到原型(也就是Person.prototype)进行查找。
// p的—proto—属性===构造函数Person的prototype属性

// 最终在原型上找到了age属性。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!