深入理解javaScript原型和闭包(1)--- 一切都是对象

“一切都是对象”这句话的重点在于如何去理解对象这个概念
——-当然,也不是一切都是对象,值类型就不是对象

首先我们先看一下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 "));

验明正身!
其次要解释的就是本文的内容—–一切(引用类型)都是对象,对象是属性的集合最需要了解的就是对象的概念。

猜你喜欢

转载自blog.csdn.net/L970524/article/details/78659411