深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(2)——函数和对象的关系
来源:互联网 发布:linux网络基础 编辑:程序博客网 时间:2024/05/17 01:22
上文已经提到,函数就是对象的一种,因为通过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)); // functionconsole.log(typeof (Array)); // function
所以,可以很负责任的说——对象都是通过函数来创建的。
现在是不是糊涂了—— 对象是函数创建的,而函数却又是一种对象——天哪!函数和对象到底是什么关系啊?
别着急!揭开这个谜底,还得先去了解一下另一位老朋友——prototype原型。
本系列文章不打算动辄几千字的长篇大论,咱们小步快跑,不至于看的太乏味。
评论:
1、
2、
对于本文,我的建议是可以这样行文:所有对象的创建都需要通过一个构造函数,虽然通过一个语法糖可以省略掉构造函数,但构造函数是确实存在的。构造函数本身也是一个对象,我们可以称之为函数对象,函数对象也可以通过它的构造函数Function()来创建。JavaScript内置不少函数对象,如Object()、String()、Array()、Function()等,它们既是对象,也可以作为构造函数用来构造其它的对象。除此之外,我们也可以定义自己的构造函数。 0 0
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包系列 系深入理解javascript原型和闭包(17)——补充:上下文环境和作用域的关系
- 深入理解javascript原型和闭包(2)--函数和对象的关系
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(0)——目录
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(5)——instanceof
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(6)——继承
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(1)——一切都是对象
- poj 2186 Popular Cows 强连通分量分解
- Java开发中equals和==的区别
- 我们约定吧
- 怎样算出15个数的和
- mysql面试必会基础(二)
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(2)——函数和对象的关系
- HTML/CSS学习笔记
- 输入100-200之间的素数及个数
- 蓝桥杯第三题,可以用全排列来做
- 利用广度优先搜索求最短路径
- Deep Learning for Beginners
- 力控调用Qrmaker实现二维码显示
- ASCII、Unicode、GBK和UTF-8
- 【Android】如何快速构建Android Demo
alert(type obj); //object
“obj”和“Object”是两码事儿