今天刷题遇到一个原型链的题目,感觉对理解原型链有点帮助。记录一下。
原题如下:
var F = function(){};
Object.prototype.a = function(){};
Function.prototype.b = function(){};
var f = new F();
关于这段代码,正确的是:()
A、f能取到a,但是取不到b
B、f能取到a,b
C、F能取到b,不能取到a
D、F能取到a,不能取到b
由题目的代码,可以得到的信息是:
1、把一个匿名函数赋给了变量F,所以F是一个函数;
2、在Object对象的原型上添加了一个属性a。并且a的值为一个匿名函数;
3、在Function对象的原型上添加了一个属性b。并且b的值为一个匿名函数;
4、new了一个f对象,且f的构造函数是F。
还需要知道的一个知识点是:普通对象是它的构造函数的实例,而函数(虽然也是对象,但函数不是普通对象)是Function的实例。
由此可以做以下分析:
对对象f的原型链分析:
对函数F的原型链分析
由此可以看出,对象f的原型链经过的是F的原型对象和Object的原型对象。所以f只能拿到a。
而函数F的原型链经过的是Function的原型对象和Object的原型对象。所以F能拿到a和b。