“一切都是对象”这句话的重点在于如何去理解对象这个概念
——-当然,也不是一切都是对象,值类型就不是对象
首先我们先看一下javascript中一个常用的运算符—–typeof。
typedef输出的几种类型标识,其中undefined、number、string、boolean属于值类型,不是对象;剩下的几种情况—–函数(function() {})、数组([1,’a’,b:20])、对象({})、null、new Klass()(new出来的一切东西都是对象。他们是引用类型。
判断一个变量是不是对象非常简单。值类型的判断用typeof,引用类型的判断用instanceof。
var fn = function() {};
console.log(fn instanceof Object);//true
那么在javascript中的对象,到底该如何定义呢?
对象,若干属性的集合
javascript中的对象比较随意,数组是对象,对象还是对象。对象里一切都是属性。只有属性,没有方法。—–方法也是一种属性,因为他的属性表示为键值对的形式。
而且,javascript中的对象可以任意扩展属性,没有class的约束。
var obj = {
a : 10,
b : function(x) {
alert(this.a + x);
},
c : {
name : '王福鹏',
year : 1999
}
};
以上代码中,obj是一个自定义的对象,其中a、b、c就是他的属性,而且在c的属性值还是一个对象,他又有name和year两个属性。
这种可能比较容易理解,那么函数和数组也可以这样定义属性吗?—–当然不行,但是他可以用另一种形式,总之函数/数组之流,只要是对象,他就是属性的结合。
var fn = function() {};
fn.a = 10;
fn.b= function() {
alert(123);
}
fn.c = {
name : "王福朋",
year : 1998
};
上段代码中,函数就作为对象被赋值了a,b,c三个属性,很明显,这就是属性的集合嘛。
这个有用吗?
咱们可以看看jQuery源码!
在jquery中,“jquery”或者“$”,这个变量其实就是一个函数,不信可以用typeof验证一下:
console.log(typeof $); //function
console.log($.trim(" ABC "));
验明正身!
其次要解释的就是本文的内容—–一切(引用类型)都是对象,对象是属性的集合最需要了解的就是对象的概念。