对象、函数、原型之间的关系

发布于:2023-09-22 ⋅ 阅读:(68) ⋅ 点赞:(0)

关系如图:

看不懂?这里给个实例来具体分析一下。

//全局中有这么两个类
    function Object () {}
    function Function() {}

    //
    var obj1 = { }
    //var Foo = new Function();
    function Foo() {}

    foo1 = new Foo();

在很多时候,构造函数称为类。

1. 普通对象的隐式原型对象__proto__指向Object函数的prototype是因为普通对象是通过new Object()创建出来的。

2. 每个函数都有一个显式原型对象prototype,同时函数也是一个对象,因此函数也有隐式原型对象__proto__。函数作为一个对象是通过new Function()创建出来的。就类似通过字面量的方式直接创建对象一样。当我们创建一个函数时,JS引擎会自动帮我们为函数添加一个对象,这个对象就是prototype,prototype里面有个constructor属性,属性值为函数对象。函数作为一个对象是通过new Function()创建出来的,所以函数的隐式原型为Function.proto。Function的prototype对象是在Function被创建出来时JS引擎自动为Function添加的,Function的prototype对象中有一个constructor属性,属性值为Function这个函数。函数的显式原型对象中的constructor值都指向自己的函数。

3. 原型对象作为对象是被全局函数Object创建出来的,全局函数Object作为函数也有自己显式原型对象prototype,因此原型对象的隐式原型对象__proto__指向全局函数Object的显式原型对象prototype。

4. 全局函数Object同时作为一个对象也有隐式原型对象__proto__, Object对象是由Function创建出来的,因此Object的隐式原型对象__proto__指向Function的显式原型对象Function.prototype。

5. 全局函数Function同时作为一个对象也有隐式原型对象__proto__,由于全局函数Function是由自己创建出来的,因此Function.__proto__指向Function。

结果

总结

了解三者关系的意义在于以后在遇到要输出对象中的属性和方法时,若产生一些奇怪的结果,可以从原理上进行分析。


网站公告

今日签到

点亮在社区的每一天
去签到