javascript原型和闭包的个人理解
来源:互联网 发布:mxo魔法协会 知乎 编辑:程序博客网 时间:2024/05/06 19:18
定义一个函数 function Fn(){}
定义一个对象 var f1 = new Fn()
在javascript中,对象其实就是一些属性的集合,对象都是通过函数来创建的(通过字面量创建的对象,其实底层也是通过函数来创建,Object、Array都是函数,可以通过 typeof 方法检测),如下图
但其实,函数也是一种对象,你可以给函数自定义属性,它也是一些属性的集合。每个函数(Fn)都有一个原型属性(prototype),它的值是一个对象(Fn.prototype),该对象一定有一个constructor属性,指向这个函数(Fn.prototype.constructor === Fn),通过这个函数创建的对象 f1 也一定有一个constructor属性,指向这个函数(f1.constructor === Fn)。
那么,问题来了,既然函数也是对象,那么我们在使用 typeof 方法时,如果是值类型,返回number/boolean/string,如果是引用类型,为什么不直接返回Object,而要返回function/Object 两种呢? javascript 中函数和对象到底有着什么千丝万缕的纠葛呢?
在javascript中,存在两个顶级函数(对象,历史上就很纠葛) function Object(){} 和 function Function(){},所有对象都有一个隐式的属性 __porto__,该属性指向创建该对象的函数的原型。下面我们来看看Object(){} 和 Function(){} 的原型和 __proto__ 吧,如图
可以看出,Object(){} 的 __proto__ 属性指向创建它的函数的原型 Function.prototype,其值是 function(){} 函数,Function(){} 的 __proto__ 属性指向它自己的原型 Function.prototype ,其值也是 function(){} 函数,实际上,对象 Function.prototype 的 __proto__ 属性指向了 Object.prototype,这就是对象和函数的关系,对象由函数创建(对象的 __proto__ 属性指向创建该对象函数的原型),而函数的原型又是对象(所有自定义函数的 __proto__ 属性指向顶级函数的原型 Function.prototype,Function.prototype 的 __proto__ 属性 指向顶级 Object(){} 的原型)。
- javascript原型和闭包的个人理解
- 深入理解javascript原型和闭包
- 深入理解JavaScript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包(3)--prototype原型
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包(7)——原型的灵活性
- Xcode报png图片格式错误
- BZOJ 3236: [Ahoi2013]作业|莫队算法|树状数组
- 递归练习-字母输出
- 字符串编程(3)——高精度任意进制加法找回文数
- 258. Add Digits
- javascript原型和闭包的个人理解
- 设计模式-模板方法
- 【AJAX】XMLHttpRequest对象的使用
- iOS开发:设置UITextView的placeholder
- 搜索关键字变红,指定字段变色 一行代码简单集成 搜索关键字变红,Android字体变红,指定字段变红
- LeetCode_OJ【53】Maximum Subarray
- 异常的出现情况及解决方式(持续更新中)
- 自己用C++写的图像处理软件试用版下载
- 关联容器