原型链式是个好东西,我们可以靠这个东西实现继承和派生。
我们需要明白一些概念,原型,原型对象,原型链。我们一个个的来看。
原型
原型(prototype):每个函数都有这个属性。这个属性指向一个对象,然后这个对象有个专业的名字叫:原型对象。
原型对象:其实就是一个对象。只是这个对象是私有的。只有构造函数可以找到这个对象。有两个特殊的属性: constructor、proto
说这么多,举个例子,画一张图,就知道了。
function Person(){
this.name = "zhaobw";
this.age = "22";
}
原型图
-
如上图所示,函数Person()的prototype指向一个原型对象Person.prototype。这个原型对象的属性constructo又指向了函数person。
我们在控制台打印,看如何可以访问到原型对象。function Person(){ this.name = "zhaobw"; this.age = "22"; } console.log(Person.prototype); console.log(Person.prototype.constructor);
console.log(Person.prototype);
- 输出的是构造函数。
console.log(Person.prototype.constructor);
- 输出的是原型对象的constructor的。
基本的概念我们都明白了。接下来说重点。原型链。我们可以根据这个东西实现很多有意思的功能。
原型链
原型链就是个链子。它就像一个链子,把对象、构造函数串联起来。我们可以通过这个链子访问到所有的对象和构造函数。
说这么多,不看一个例子,画一张图。这一次我们弄一大的。详细点的
例子
function Person(){
this.name = "zhaobw";
this.age = "22";
}
var student = new Person();
原型图.png
看完图后是不是很晕?晕,就对了。
我说说我的想法。js的世界,你可以这样理解,这个世界的上帝有两个,一个是function,一个是object。这两个大哥创造了世界。
- 一个function有的属性是:proto、prototype
- 一个obejct有的属性是:proto、prototype、constructor
- 所有的是对象都是由object创建的。
- 所有的函数都是可以看成对象。
- proto是指向构造函数的原型对象。
- prototype是指向自己的原型对象。
也就是object创造了function,function创造了obejct。两个人相互创建了对方。所以晕也是就是晕最后面一点。
一句,所有的对象都是object创建的。所有的函数都是function创建的。
晕啊!!!
网友评论