为了账号安全,请及时绑定邮箱和手机立即绑定

函数对象在原型链查找属性时是先查找函数自身的prototype的属性还是先找Function.prototype的属性?

函数对象在原型链查找属性时是先查找函数自身的prototype的属性还是先找Function.prototype的属性?

慕粉3428670 2017-03-11 09:52:28
我们知道,函数对象都是由Function创建的,即函数对象都是Function对象的实例。如数组对象Array是Function的实例,Array对象生成时,继承了Function.prototype的属性。 但Array也有自己的原型对象Array.prototype,那么Array对象的实例(如arr = new Array()), arr在原型链上查找属性时是先查找Array.prototype的属性,还是先查找Function.prototype的属性?
查看完整描述

3 回答

已采纳
?
西兰花伟大炮

TA贡献376条经验 获得超318个赞

Function.prototype.haha = "foo"
"foo"
Array.prototype.haha = "fun"
"fun"
var arr = new Array()
undefined
arr.haha
"fun"

应该是这个意思

查看完整回答
1 反对 回复 2017-03-11
  • 慕粉3428670
    慕粉3428670
    我大概明白了。函数都是由Function对象创建的,而函数可以new出一个实例对象,但new出来的只是一个对象,并不是函数,所以new出来的实例对象不能使用Function.prototype的属性和方法(caller、apply()、call()等)。要使用Function.prototype的属性和方法,属性和方法前面必须是一个函数对象,如function Fn1(){...}, function Fn2(){....}, var fn = new Fn1(); Fn2.apply(fn); //fn是Fn1的实例,通过apply可以使用函数Fn2。
?
微小唯

TA贡献2条经验 获得超0个赞

先查找Array.prototype,再是查找,下次你可以在控制台调试,调试代码可以如下:

var  arr=new Array();

console.log(arr.__proto__);

console.log(arr.__proto__.__proto__)

查看完整回答
反对 回复 2017-03-11
  • 慕粉3428670
    慕粉3428670
    按照原型链,arr永远不会查询到Function.prototype的属性和方法。[抱拳]
?
慕粉3428670

TA贡献1条经验 获得超0个赞

我觉得问题应该是:用Function对象 生成函数实例时,Function.prototype上的属性是否会自动添加到生成的函数实例上?

查看完整回答
反对 回复 2017-03-11
  • 3 回答
  • 0 关注
  • 2111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信