“一切皆对象”

当然也不是所有的都是对象,值类型(undefined,number,string,boolean)就不是对象;而函数、对象、数组、null、new Number(10)都是对象,它们都是引用类型。而判断一个变量是不是对象,值类型就用typeof、引用类型就用instanceof。

对象--属性的集合

java中的对象是new一个class出来,而且里面有属性、方法、字段,规定非常严格。而JavaScript中数组是对象、函数是对象、对象还是对象。对象里面的一切都是属性,只有属性没有方法。那么方法怎么表示呢?是的方法也是一种属性,它的属性表示为键值对的形式。

而且JavaScript中的对象可以任意的扩展属性,不受class的约束。

var obj={

  a:10,

  b:function(x){

   alert(this.a+x) 

}

  c:{

  name:"小明",

  age:10

}

}

obj为一个自定义对象,a,b,c都是它的属性,而且c属性值是一个对象;对象可能比较好理解,那么函数和数组怎么定义呢?以函数为例

var fn=function(){

  alert(100);

}

fn.a=100;

fn.b=function(){

  alert(alert(1));

}

fn.c={

  name:"小明",

  age:10

}

在jQuery源码中,“jQuery”或者“$”,这个变量其实是一个函数,咱们常用的 $.trim() 也是个函数,很明显,这就是在$或者jQuery函数上加了一个trim属性,属性值是函数。

综合得出结论:一切(引用类型)都是对象,对象是属性的集合。

最后,有个疑问。在typeof的输出类型中,function和object都是对象,为何却要输出两种答案呢?都叫做object不行吗?——当然不行。

深入理解js——一切都是对象的更多相关文章

  1. 理解js的prototype原型对象

    我们创建的每一个函数都有一个prototype(原型)属性.这个属性是一个指针,指向一个对象,而这个对象的用途是包括能够由特定类型的全部实例共享的属性和方法.假设依照字面意思来理解,那么prototy ...

  2. 和我一起理解js中的事件对象

    我们知道在JS中常用的事件有: 页面事件:load: 焦点事件:focus,blur: 鼠标事件:click,mouseout,mouseover,mousemove等: 键盘事件:keydown,k ...

  3. 深入理解js——prototype原型

    之前(深入理解js--一切皆是对象)中说道,函数也是一种对象.它也是属性的集合,你也可以对函数进行自定义属性.而JavaScript默认的给了函数一个属性--prototype(原型).每个函数都有一 ...

  4. 【学习笔记】深入理解js原型和闭包(1)—— 一切都是对象

    “一切都是对象”这句话的重点在于如何去理解“对象”这个概念. ——当然,也不是所有的都是对象,值类型就不是对象. 首先咱们还是先看看javascript中一个常用的运算符——typeof.typeof ...

  5. 程序猿都没对象,JS竟然有对象?

    现在做项目基本是套用框架,不论是网上的前端还是后端框架,也会寻找一些封装好的插件拿来即用,但还是希望拿来时最好自己过后再回过头了解里面的原理,学习里面优秀的东西,不论代码封装性,还是小到命名. 好吧, ...

  6. 深入理解javascript原型和闭包(1)——一切都是对象

    “一切都是对象”这句话的重点在于如何去理解“对象”这个概念. ——当然,也不是所有的都是对象,值类型就不是对象. 首先咱们还是先看看javascript中一个常用的函数——typeof().typeo ...

  7. js对象详解(JavaScript对象深度剖析,深度理解js对象)

    js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...

  8. 在JS中,一切东东其实都是对象

    对象是组成JavaScript的基本单元,在JS中,一切东东其实都是对象,而且功能非常强大,它不仅风格独特,功能也与众不同. 一.引用(reference) 引用的概念是JS的基础之一,它是指向对象实 ...

  9. 【学习笔记】六:面向对象的程序设计——理解JS中的对象属性、创建对象、JS中的继承

    ES中没有类的概念,这也使其对象和其他语言中的对象有所不同,ES中定义对象为:“无序属性的集合,其属性包含基本值.对象或者函数”.现在常用的创建单个对象的方法为对象字面量形式.在常见多个对象时,使用工 ...

随机推荐

  1. [原创]cocos2d-x研习录-第一阶 背景介绍 之 cocos2d-x特点

        上一节了解Cocos2D家族史,本节关注Cocos2D家庭的一个重要分支Cocos2D-x.Cocos2D-x是Cocos2D的C++移植版本,它的最大特性是跨平台,使开发者编写一套C++代码 ...

  2. JDBC连接数据库操作

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

  3. 利用Handler延时机制实现点击两次退出程序

    第一步:声明一个标记变量用来判断是否需要退出 第二步:重写handlerMessage方法 第三步:自定义一个exit()方法给标记变量赋值 第四步:重写onKeyDown方法   private s ...

  4. knockout 学习实例6 attr

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 将WeX5部署到自己的Tomcat服务器上

    页面服务UIServer布署 WeX5自带页面服务UIServer的是标准Web应用,可以部署在Java Web应用服务器上.下面介绍如何在Tomcat和WebLogic中部署WeX5的UIServe ...

  6. 学习SQL的点点滴滴(三)-修改数据库的兼容级别

    语法 ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 } 参数 database_name 要修改的数据库 ...

  7. 升级NC6.3

    2014-04-23 江苏建工&用友公司会谈提纲 1,合同规定江苏建工用友NC在实施成功之后三年免服务费(2010年增补了资金管理,如果以2010年作为软件最终实施完成,那么2010-2013 ...

  8. Android OpenCV 图像识别

    最近打算写一个android 平台opencv 的小程序,着手查找了一下资料.网络上的资料参差不齐,有一些都比较老旧,我参考了前面的方法找到了一个简单的搭建方法,分享给大家. 0,环境的搭建: jav ...

  9. 关于block的一些理解

    之前一直都是用这别人或者是系统系统封装好的block,用这都挺好,可以访问那些定义了block变量的函数变量在block中使用. 首先总结一个block的用法:1.block有些类似于函数的指针 拥有 ...

  10. 有关项目上潜在需要的移动端GIS系统源码整理,待后续更新

    GPS Tools For Android 前言: GPS数据在做GIS开发时的一份宝贵的数据,在不侵犯他人隐私的情况下通过互联网的模式收集GPS是成本最为低廉的一种模式. 背景: 现在公司在做一个项 ...