Javascript原型

    Javascript最神奇和有意思的莫过于“原型”了;在阅读了,众多书籍和博客之后,我也有个自己的理解和看法;下面就和大家分享一下。

先普及几个概念 

 

1.     prototype属性

Javascript中创建一个函数(包括普通的函数,及构造函数,函数表达式),该函数就有一个prototype属性-该属性指向该函数的原型对象;

2.      prototype对象

原型对象包含所有实例共享的属性和方法。在默认情况下所有原型对象都自动获取一个constructor(构造函数)属性,这个属性指向prototype属性所在函数的指针。

如下简单例子:

var a=function(){}   函数表达式

a.prototype

Object {}

function b(){}       函数

b.prototype

b {}

function Person(){}   构造函数

Person.prototype.name="jxj";

"jxj"

Person.prototype.sayHi=function(){console.log(this.name)}

function (){console.log(this.name)}

var p=new Person();   实例p

p.name

"jxj"

p.sayHi();

jxj

再啰嗦一下,所有的js对象可以访问constructor,诸如a. constructor,之类;但是a对象实际是访问的是其原型对象上的constructor属性。

例子如下:

p.constructor

function Person(){}

p.hasOwnProperty("constructor");

false

p.constructor===Person.prototype.constructor

true

 

还有一个重要的指针【Prototype】(有些资料也叫_proto_),该指针指向原型对象

例子如下:

 

Person.prototype.isPrototypeOf(p)

true

Function.prototype.isPrototypeOf(Person);//注意函数的该属性指向Function的原型

true



说了这么多,直接上图吧。


Javascript原型_原型