一切都是对象
(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