函数、对象与prototype

一切都是对象

(undefined, number, string, boolean)属于简单的值类型,不是对象。剩下的几种情况——函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。

javascript ——数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,只有属性,没有方法。——方法也是一种属性。因为它的属性表示为键值对的形式。

var obj = {                                    //obj是一个自定义的对象,a、b、c都是它的属性

    a : 10,                                      //a的属性值是10

    b : function (x) {                    //b的属性值是一个函数

            alert(this.a + x)

          }

    c : {                                        //c的属性值是一个对象,它又有name、year两个属性

            name :  'zev',

            year : 1993

          }

}

函数与对象的关系:对象是函数创建的(new)

typeof( function() {...} )                        ---------------function

typeof( object )                                    ---------------object

function () {...} instanceof Object        ---------------true

我们可以说数组是对象中的一种,但却不能说函数是对象的一种,它不是一种包含与被包含的关系,它们的关系很复杂,有点鸡生蛋蛋生鸡的逻辑。

有一点是确定的!——任何对象都是通过函数创建的,哪怕是数组。虽然从语法上看不出来,但是数组的构建是被一层语法糖包裹着。

function Fn ( ) { ......}

var obj = new Fn( )

函数与对象的关系:函数是一种对象。

函数也是属性的集合,也可以对函数进行自定义属性。

prototype是函数的默认属性,是每个函数都显式具备的,它的属性值是一个对象prototype,而这个对象默认只有constructor一个属性值(可以在里面自定义属性),而这个constructor又恰好指向function函数本身,用伪代码表示如下:

var function {

        prototype : {

                  constructor :  function

        }

}


每个函数都有一个prototype,每个对象都有一个__proto__

__proto__称为隐式原型,这个属性引用了创建这个对象的函数的prototype。即:fn.proto=== Fn.prototype

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容