原型链,很让人头疼的术语,有太多的文章和权威书籍做解释,但是始终很难看懂,下文是我的一些愚见。
js说是面向对象的,但其实是没有严格的类、封装、继承这些东西(至少没有像java那样),所以就弄了个原型链prototype来搞定这些事情。
每个对象(object) 都有prototype (内部包含属性和方法成员),但是 new 的时候不会有,
而 __proto__内原型(继承,指向其‘父类’,)[new 的时候也有],这么一来就明了了,每个对象就像面向对象语言里面的实例,有继承自父类,也有自定义的属性和方法。
constructor 构造函数(简单的说谁创造了它)
sub.__proto__==base.prototype // true
sub.__proto__.constructor ==base.prototype.constructor // true
// 原型链的使用
function base(){
this.c="sd"}
base.prototype.from = 'base'; // 自定义的属性
base.prototype.constructor=base
base.prototype.drop=function(){ // do something} // 父类自定义的一个方法 something
var example = new base();console.log( example.__proto__.constructor ==base.prototype.constructor) //true
那么example 同时有 {// do something } 方法和from 属性(继承自父类base),著名的jquery 也是这么玩 的!
一个函数(或new 出来的对象)首先执行prototype 的方法,如果没有则执行__proto__ (即执行继承而来的)