为什么 Function 原型上的方法,在实例上无法获取?

为什么Function原型上的方法,在实例上无法获取?


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();//f.b() f.b is not a function?????

F.a();//a

F.b();//b

还有为什么有一下输出结果??

Object instanceof Object
//true
Function instanceof Object
//true ??
Boolean instanceof Boolean
//false ??
String instanceof String
//false ??
阅读 2.8k
4 个回答

f继承自F.prototype,并不继承自Function.prototype,所以找不到b;F.prototype继承自Object.prototype,所以可以找到a;F继承自Function.prototype,所以可以找到b;Function.prototype继承自Object.prototype,所以可以找到a。

instanceof是根据原型链来查找的,所以一个函数instanceof自己本身,返回false是很正常的,返回true才不正常,比如Object instanceof Object,这是因为Object和Function之间的错误关系,Object继承自Function.prototype,Function.prototype继承自Object.prototype

送你一张图帮助理解楼上的答案
image.png

Function.prototype.b = function() {
    console.log('b');
}

function test(){}

test.b() // b

f = new F()FFuncion ,但是 f 不是啊。f 只是一个普通的 Object 而已。

你试试 F.b

Object instanceof Object
//true
Function instanceof Object
//true ?? 当然,大家(除了少数奇怪的东西之外,比如 Object.create(null))都是 Object
Boolean instanceof Boolean
//false ?? new Boolean() instanceof Boolean === true。
// Boolean 本身是一个构造函数,它当然不是 Boolean
String instanceof String
//false ?? 同上。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题