上文(深入理解jS原型和闭包(1)——一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断。

 var fn = function () { };
console.log(fn instanceof Object); // true

对!函数是一种对象,但是函数却不像数组一样——你可以说数组是对象的一种,因为数组就像是对象的一个子集一样。但是函数与对象之间,却不仅仅是一种包含和被包含的关系,函数和对象之间的关系比较复杂,甚至有一点鸡生蛋蛋生鸡的逻辑,咱们这一节就缕一缕。

还是先看一个小例子吧。

  function Fn() {
this.name = '王福朋';
this.year = 1988;
}
var fn1 = new Fn();

上面的这个例子很简单,它能说明:对象可以通过函数来创建。对!也只能说明这一点。

但是我要说——对象都是通过函数创建的——有些人可能反驳:不对!因为:

 var obj = { a: 10, b: 20 };
var arr = [5, 'x', true];

但是不好意思,这个——真的——是一种——“快捷方式”,在编程语言中,一般叫做“语法糖”。

做“语法糖”做的最好的可谓是微软大哥,它把他们家C#那小子弄的不男不女从的,本想图个人见人爱,谁承想还得到处跟人解释——其实它是个男孩!

话归正传——其实以上代码的本质是:

 //var obj = { a: 10, b: 20 };
//var arr = [5, 'x', true]; var obj = new Object();
obj.a = 10;
obj.b = 20; var arr = new Array();
arr[0] = 5;
arr[1] = 'x';
arr[2] = true;

而其中的 Object 和 Array 都是函数:

 console.log(typeof (Object));  // function
console.log(typeof (Array)); // function

所以,可以很负责任的说——对象都是通过函数来创建的。

现在是不是糊涂了—— 对象是函数创建的,而函数却又是一种对象——天哪!函数和对象到底是什么关系啊?

别着急!揭开这个谜底,还得先去了解一下另一位老朋友——prototype原型。

本系列文章不打算动辄几千字的长篇大论,咱们小步快跑,不至于看的太乏味。

---------------------------------------------------------------------------

本文已更新到《深入理解js原型和闭包》的目录更多内容可参考《深入理解js原型和闭包》

最新文章

  1. SQL 中的 AND OR
  2. 有时打开myeclipse,部署报错解决方案
  3. 关于ScrollView嵌套ListView问题
  4. 在Github上搭建自己的博客(Windows平台)
  5. Windows下文件的所有和权限
  6. java实现UDP协议传输DatagramSocket
  7. svg绘制蓝色星空,月亮,旋转灯塔
  8. HDU2028 Lowest Common Multiple Plus
  9. 谁动了我的timer?——C#的垃圾回收和调试
  10. PHP Libxml
  11. WPF 实现控件间拖拽内容
  12. DirectX11 学习笔记9 - 动态顶点缓冲区 和 静态顶点缓冲区
  13. Struts2大约Action系统培训6大约action的接受三个参数的方法
  14. java 对象、集合的非空判断
  15. xml解析之使用dom4j的api对xml文件进行CRUD(二)
  16. CF1157C1-Increasing Subsequence (easy version)题解
  17. go 调用windows dll 的三种方法
  18. NCBI上查看SNP位点在哪个基因座上(locus)
  19. Windows下dump文件生成与分析
  20. LeetCode DB: Duplicate Emails

热门文章

  1. ZOJ3469 Food Delivery —— 区间DP
  2. 织梦CMS首页、列表页文章如何调出该文章TAG标签?
  3. js操作创建和操作外部样式的例子
  4. 【Java】DateUtil(1)
  5. QT官网开源版下载引导(不用登录QT账号)
  6. 【AC自动机&&Trie图】积累
  7. 移动web开发-------meta
  8. View Controller Programming Guide for iOS---(七)---Resizing the View Controller’s Views
  9. A tutorial by example(转载)
  10. 由mysql分区想到的分表分库的方案