微信号:FrontDev

介绍:分享 Web 前端相关的技术文章、工具资源、精选课程、热点资讯

后端程序员的 Js 之旅 : JavaScript 对象系统

2016-04-28 21:25 前端大全

(点击上方公众号,可快速关注)


作者:李少鹏(@BenjaLi)

链接:http://lishaopeng.com/2016/01/24/js-object-system/


JavaScript 的基本类型是数值类型、字符串类型、布尔类型、null 和 undefined,除此之外所有其他类型都是对象:数组是对象、函数是对象、正则表达式是对象,当然对象也是对象(在后端程序员的 JavaScript 之旅:好的设计与坏的设计 一文中,我们了解到甚至 null 也是对象)。对象系统是 JavaScript 的根基,基于原型的面向对象设计巧妙地隐藏了内部的原型链的实现,让使用者容易上手,然而想对其做进一步的了解会产生许多疑惑。


我们知道,一个普通对象(非函数对象)是通过原型链实现面向对象的,那么函数对象作为一个对象,它的原型链指向什么? Function 函数对象和 Object 函数对象之间又有什么联系? 好在我找到 JavaScript Object Layout 一文对 JavaScript 的对象系统画了一张很直观的图,可以帮助我们理解。


要点


  1. 对象通过__proto__属性指向其构造函数(函数对象)的prototype属性实现继承。

  2. 构造函数的prototype属性实际上是包含constructor属性的对象,该constructor属性指向构造函数。

  3. 构造函数(函数对象)本身并不使用prototype属性做原型链,供其创建出来的对象使用。

  4. 构造函数默认的prototype属性可以被改写,这时候其创建的对象继承这个被改写后的属性。

  5. Function 对象比较特殊,Function 的__proto__指向Function.prototype,换句话说是 Function 自己构造了自己。

  6. Object instanceof Object === true,但是Foo instanceof Foo === false



【今日微信公号推荐↓】

更多推荐请看值得关注的技术和设计公众号


其中推荐了包括技术设计极客 和 IT相亲相关的热门公众号。技术涵盖:Python、Web前端、Java、安卓、iOS、PHP、C/C++、.NET、Linux、数据库、运维、大数据、算法、IT职场等。点击《值得关注的技术和设计公众号》,发现精彩!

 
前端大全 更多文章 详解Javascript中的Object对象 结合个人经历总结的前端入门方法 前端不为人知的一面–前端冷知识集锦 一份优秀的前端开发工程师简历是怎么样的? 浅谈Web缓存
猜您喜欢 Android中的多线程编程详解 干货|云计算灾备必须考虑的四个方面 有赞搜索引擎实践(算法篇) 写让别人能读懂的代码 "黑客"如何通过技术手段"拿"走你的快递包裹