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
说了这么多,直接上图吧。