js原型链一道题

var F = function() {};
Object.prototype.a = function() {
  console.log("a()");
};
Function.prototype.b = function() {
  console.log("b()");
};
var f = new F();
F.a();//a()
F.b();//b()
f.a();//a()
f.b();//Uncaught TypeError: f.b is not a function

不明白这里F.a()和f.a()有什么区别么?

阅读 1.7k
2 个回答

F 是一个函数
F.__proto__ == Function.prototype
Function.prototype.__proto__ == Object.prototype
所以
F.__proto__.__proto__ == Object.prototype

aF.__proto__.__proto__ 上 (Object.prototype)
bF.__proto__ 上 (Funcion.prototype)

f 并不是
f.__proto__ == F.prototype
F.prototype 是一个的 Object()f.__proto__.__proto__ == F.prototype.__proto__ == Object.prototype

af.__proto__.__proto__ 上 (Object.prototype)
b 并找不到,于是是 undefined

F是函数(当然也是对象...)
f是对象

为什么都是打印a(),但是我还要说他们不一样呢,是因为查找的方式不同,
F.a() 是通过 F.prototype.__proto__.a() 调用的
f.a() 是通过 f.__proto__.__proto__.a() 调用的

希望我的回答对你有帮助!!!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题