原型链的概念:
ECMAScript 中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本思想是利用原 型让一个引用类型继承另一个引用类型的属性和方法。简单回顾一下构造函数、原型和实例的关系:每 个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型 对象的内部指针。那么,假如我们让原型对象等于另一个类型的实例,结果会怎么样呢?显然,此时的 原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数 的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实 例与原型的链条。这就是所谓原型链的基本概念
原型链示例
[JavaScript] 纯文本查看 复制代码 // 构造函数
function Foo(name, age) {
this.name = name
}
Foo.prototype.alertName = function() {
alert(this.name)
}
// 创建示例
var f = new Foo('张三')
f.printName = function() {
console.log(this.name)
}
// 测试
f.printName()
f.alertName()
/*
f.printName() 构造函数上有
f.alertName() 构造函数上没有,继续到原型上查找
Foo上找 -> Foo.prototype上找 -> Object.prototype -> null(避免死循环)
*/
就是从实例对象往上找构造这个实例的相关的对象,然后这个关联的对象再往上找,它又有创造它的上一级原型对象,以此类推,一直到object.prototype原型对象终止,这个链条就断了,也就是说object.prototype是链条的顶端。
|