You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
p.constructor===Person// function Person () {}p.constructor===Person.prototype.constructor// function Person () {}p.__proto__===Person.prototype// {say: function () {}}p.__proto__===p.constructor.prototype// {say: function () {}}p.__proto__.__proto__===Person.prototype.__proto__===Object.prototype
对于函数对象:
varf=newFunction()f.__proto__===Function.prototype// function () {}f.__proto__.__proto__===Function.prototype.__proto__===Object.prototype
JavaScript中万物皆是对象,且对象细分为
普通对象
和函数对象
。凡是通过
new Function()
创建的均为函数对象
,如Object
、Function
、Number
、Boolean
、String
、Array
、RegExp
等等,其余都是普通对象
。函数对象
的__proto__
均指向Function.prototype
,且为空函数function () {}
。普通对象
的__proto__
均指向该对象构造函数
的prototype
。Function.prototype.__proto__ === Object.prototype
Object.prototype.__proto__ = null
对于普通对象:
Person
相当于是构造函数,p
是Person
的实例,并且继承p
的原型p.__proto__
,即Person.prototype
的所有属性。当然,
Person
本身也是函数对象,这里我们考虑的是Person
的实例p
。对于函数对象:
注意:
当我们重写原型对象,而不是修改原型对象时:
这时,
g.constructor
指向的是Object
,可以通过指定constructor
避免这种情况:本文参考最详尽的 JS 原型与原型链终极详解,没有「可能是」进行总结,感谢原作者。
The text was updated successfully, but these errors were encountered: