简单清晰总结js原型与原型链

function fn(){},fn 为 Function的一个实例,原型链为 null -> Object -> Function -> fn

null -> Object -> Object.prototype ~ Function -> Function.prototype ~ fn -> fn.prototype ~ new fn()

上面面的~表示等价关系,都是同一个类的实例(不同的是 prototype 包含了constructor指针)

比如 Function.prototype.__proto__ === Object.prototype

Object.prototype.constructor = Object

只有函数有prototype, 所有对象都有__proto__ 。函数也是对象,所以函数也有__proto__

__proto__ 指向构造函数的prototype

考察时间,请判断以下比较是否为真:

null === Object.prototype.__proto__;

Object.prototype === Function.prototype.__proto__;

Object.prototype === fn.prototype.__proto__ ;

Function.prototype === fn.prototype;

Object.prototype.isPrototypeOf(fn) 

Object.prototype.isPrototypeOf(fn.prototype)

Function.prototype === fn.__proto__; 

Function.prototype.isPrototypeOf(fn) 

Function.prototype.isPrototypeOf(fn.prototype) // false

答案:以上判断若未特殊说明,结果都为真

PS:对于 const fn = () => {} 这样的箭头函数,不属于原型链的范畴 可以参考 http://www.cnblogs.com/mengff/p/9656486.html

猜你喜欢

转载自www.cnblogs.com/huashiyiqike/p/10542585.html