JS--原型与原型链

一:原型的概念

只要创建了一个新函数,就会为该函数创建一个prototype属性,该属性指向函数的原型对象。所有的原型对象都会自动获得一个constructor属性,指向prototype属性所在的函数。调用构造函数创建一个实例后,在实例内部包含一个[[Prototype]]指针,指向构造函数的原型。 在脚本中没有标准的方式访问[[Prototype]],但Firefox、Safari、Chrome在每个对象上都支持一个属性__proto__。注意,这个连接存在于实例于构造函数的原型对象之间,不存在于实例与构造函数之间,即__proto__指向的是构造函数的原型,与构造函数没有直接的关系。

例如:

function Person(){
 }
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function(){
 alert(this.name);
};
var person1 = new Person();
person1.sayName(); //"Nicholas"
var person2 = new Person(); 
person2.sayName(); //"Nicholas"
alert(person1.sayName == person2.sayName); //true 

该段代码各个对象之间的关系如下: 

 

二.原型链

所有引用类型默认继承了Object。

函数 ----> Function.prototype ----> Object.prototype

函数通过属性 __proto__ 指向Function.prototype

1.Object构造函数 是 通过 Function 构造函数 实例化出来的。

2.Function构造函数 也是 通过 Function 构造函数 实例化出来的,即Function 是自己的构造函数。

3.Object .__proto__指向Function.prototype。又有 Function.prototype 继承自 Object.prototype即Function.prototype.__proto__指向Object.prototype。

4.原型链最顶端的对象是Object.prototype。Object.prototype.__proto__=null

Function 是自己的构造函数,如图:

 

总结:

1.任何函数继承自Function.prototype

2.任何对象最终继承自 Object.prototype

  

posted @ 2020-05-18 14:53  Quark_L  阅读(188)  评论(0)    收藏  举报