每日一题(五四)var F=function(){}Object.prototype.a = function(){console.log(123) }F.a() F.b() f.a() f.b()

写出代码的执行结果

var F = function(){};
Object.prototype.a = function(){
    console.log('123');
};
Function.prototype.b = function(){
    console.log('456');
}
var f = new F();
F.a();
F.b();
f.a();
f.b();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

答案:

123
456
123
报错:Uncaught TypeError: f.b is not a function

解析:

1、F.a();F.b();

F 是个构造函数,而 F 是构造函数 Function 的一个实例。因为 F instanceof  Object === true 、F instanceof Function === true,由此我们可以得出结论:F 是 Object 和 Function 两个的实例,即 F 能访问到 a, 也能访问到 b。所以 F.a() 输出 123 ,F.b() 输出 456。

2、f.a();f.b();

对于 f ,我们先来看一下下面的结果:

f 并不是 Function 的实例,因为它本来就不是构造函数,调用的是 Function 原型链上的相关属性和方法了,只能访问到 Object 原型链。所以 f.a() 输出 123  ,而 f.b() 就报错了。

3、分析查找路径

1> F.a 的查找路径:F 自身:没有 ---> F.__proto__(Function.prototype):没有---> F.__proto__.__proto__(Object.prototype):找到了输出 123

2> F.b 的查找路径:F 自身:没有 ---> F.prototype(Function.prototype):456

3> f.a 的查找路径:f 自身:没有 ---> f.__proto__(Object.prototype):输出 123

4> f.b 的查找路径:f 自身:没有 ---> f.__proto__(Object.prototype):没有 ---> f.__proto__.__proto__(Object.prototype.__proto__:null):找不到,报错

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值