2 - javascript原型和闭包( 函数和对象的关系)
2016-07-08 00:00
393 查看
摘要: 来自一位很赞的博友...thank you!
函数和对象的关系
上文(一切都是对象)已经提到,函数就是对象的一种,通过instanceof函数就可以判断。
函数是一种对象,但是函数却不像数组一样,你可以说数组是对象的一种,因为数组就像是对象的一个子集一样。但是函数和对象之间,却不仅仅是一种包含和被包含的关系,函数和对象之间的关系比较复杂,甚至有一点鸡生蛋蛋生鸡的逻辑。
还是先看一个小例子吧:
上面的例子很简单,它能说明:对象可以通过函数来创建的,对!也只能说明这一点。
对象都是通过函数创建的
如上创建的对象是通过快捷方式创建,在编程语言中,一般叫做“语法糖”;
言归正传,其实以上代码的本质是:
而其中的Object 和 Array都是函数。
所以对象都是通过函数创建的。
现在是不是有点晕了,对象是函数创建的,而函数却又是一种对象。函数和对象到底是什么关系?
如果想知道为什么?还得了解prototype (原型)的概念。
函数和对象的关系
上文(一切都是对象)已经提到,函数就是对象的一种,通过instanceof函数就可以判断。
var fn = function(){}; document.writeln(fn instanceof Object);//true
函数是一种对象,但是函数却不像数组一样,你可以说数组是对象的一种,因为数组就像是对象的一个子集一样。但是函数和对象之间,却不仅仅是一种包含和被包含的关系,函数和对象之间的关系比较复杂,甚至有一点鸡生蛋蛋生鸡的逻辑。
还是先看一个小例子吧:
function Fn(){ this.name ="nihao"; this.age = 23; } var fn1 = new Fn();
上面的例子很简单,它能说明:对象可以通过函数来创建的,对!也只能说明这一点。
对象都是通过函数创建的
var obj = {a:10,b:'nihao'}; var arr = [5,true,'string'];
如上创建的对象是通过快捷方式创建,在编程语言中,一般叫做“语法糖”;
言归正传,其实以上代码的本质是:
var obj = new Object(); obj.a = 10; obj.b="nihao"; var arr = new Array(); arr[0] = 5; arr[1] = false; arr[2] = 'string';
而其中的Object 和 Array都是函数。
console.log(typeof (Object));// function console.log(typeof (Array));// function
所以对象都是通过函数创建的。
现在是不是有点晕了,对象是函数创建的,而函数却又是一种对象。函数和对象到底是什么关系?
如果想知道为什么?还得了解prototype (原型)的概念。
相关文章推荐
- jsonp跨域请求
- jstl numberFormat & dateFormat
- 使用Jackson时转换JSON时,日期格式设置
- 利用jstack检测死锁DeadLock
- js 打开窗口
- 如何执行JavaScript文件
- js中的两种循环
- js弹框3秒后自动消失
- JSBinding / Testing
- javascript继承之一
- day2总结--JS切换卡效果(转自个人印象笔记)
- 【javascript]-Dom的编辑
- Interesting JavaScript
- javascript对象
- JS 获取Form表单信息序列化
- js学习笔记第一篇
- javascript 面试题收集
- 使用jstack分析cpu消耗过高的问题
- JS FOR循环的鼠标事件(闭包)
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解