在js中对象的都是从Object.prototype
中构造出来的,而Object.prototype.__proto__ == null
就说明Objec
t是所有对象的父类,这句话的意思就是,假如现在有一个function Person(){}
这样的构造函数,我对它进行实例化后它会成为Person {}
,很明显我把它实例化成了一个对象,js中创建对象的方法中有一个这样的方法var obj = new Object()
,它执行后会创建一个对象{}
这个对象的原型是__proto__: Object
,这证明它的原型是Object.prototype
,而之前的var obj = new Object()
,证明我是以Object的原型为模板创建的对象,再回想一下Math
和Date()
有什么区别?
Math在使用时可以直接调用其中的属性和方法这说明他是一个对象,
而Date()在使用前要先进行实例化,实例化结束后它能用调用它们的方法,这样它的话,它不就是一个构造函数么,先实例成对象在可以调用,
回归话题:函数是一个特殊的对象,既然是对象,它是不是就有可能是通过某种构造函数实例化出来的呢?
实际上就上面的function Person(){}
Person.__proto__ == Function.prototype
这就说明Person实际上也是其他通过其他构造函数实例化出来的对象,那Function
是什么,Function.prototype.__proto__ == Object.prototype
说明Function的原型的原型和Object的原型是同一个对象,可以看出所有的对象都是通过构造函数构造出来的,例如Math.__proto__ == Object.prototype
而Object
是由Funtion构造而来的所以它们构造的源头是Function.prototype
文字中有些逻辑,我没有表达的很清楚,请求大佬指出 万分感谢