object与Function的关系总结

原博文地址:https://blog.csdn.net/niehuang/article/details/80527773 

弄清楚这两者的关系前,有两句话是之后所有推论的基础:

1. 首先Object和Function都是构造函数,而所有的构造函数的都是Function的实例对象. 因此Object是Function的实例对象
2. Function.prototype是Object的实例对象

由以上两句话直译就是:

Object.__proto__ === Function.prototype

Function.prototype.__proto__ === Object.prototype

3.又由 实例对象的原型(我们以__proto__来表示)会指向其构造函数的prototype属性,有

Function.__proto__ === Function.prototype


4. 当我们访问一个属性值的时候, 它会沿着原型链向上查找, 直到找到或者到Object.prototype.__proto__(为null)截止.
假如我们有以下例子:

var foo = {},
    F = function(){};
 
Object.prototype.a = 'value a';
Function.prototype.b = 'value b';
 
console.log(foo.a)    // value a
console.log(foo.b)    // undefined
console.log(F.a)      // value a
console.log(F.b)      // value b

那么

foo.a的查找路径: foo自身: 没有 ---> foo.__proto__(Object.prototype): 找到value a
foo.b的查找路径: foo自身: 没有 ---> foo.__proto__(Object.prototype): 没有 ---> foo.__proto__.__proto__ (Object.prototype.__proto__): 没有
F.a的查找路径: F自身: 没有 ---> F.__proto__(Function.prototype): 没有 ---> F.__proto__.__proto__(Object.prototype): 找到value a
F.b的查找路径: F自身: 没有 ---> F.__proto__(Function.prototype): 找到value b
4.关于instanceof的结果不要仅从字面上理解, 它的计算规则是: 如果右侧构造函数的prototype属性能在左侧的对象的原型链中找到, 那么就返回true, 否则就返回false

Object intanceof Function: Object.__proto__ === Function.prototype, 因为结果为true
Function instanceof Object: Function.__proto__.__proto__ === Object.prototype, 因为结果也为true
至于你说的, Object和Function互为实例对象是不对的,应该是 : Object是Function的实例对象, Function.prototype是Object的实例对象

5.实例对象的constructor属性指向其构造函数, 因此Object.constructor === Function, Function.constructor === Function.

所以总结:

Object 对象,拿不到 Function 原型上的属性   而 Funtion 对象可以拿到 Object 原型上的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值