JS中的原型与原型链

原型(prototype)

在 JavaScript 中,每当定义一个对象(函数也是对象)时候,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象

每个对象都有__proto__ 属性,但只有函数对象才有 prototype 属性。

原型的作用

通过构造函数为实例对象定义属性有一个缺点,同一个构造函数的多个实例之间,无法共享属性,从而造成对系统资源的浪费。

JavaScript 继承机制的设计思想就是,原型对象的所有属性和方法,都能被实例对象共享。也就是说,如果属性和方法定义在原型上,那么所有实例对象就能共享,不仅节省了内存,还体现了实例对象之间的联系。

__proto__

JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象。

Number、String、Boolean类型有各自的共有属性__proto__,各自的共有属性__proto__又指向了普通对象Object的__proto__,普通对象Object的__proto__指向null

var o1 = {}
o1.__proto__ === Object.prototype //true
var n1 = new Number(1)
n1.__proto__ === Number.prototype //true
n1.__proto__.__proto__ === Object.prototype //true
n1.__proto__.__proto__.__proto__ === null //true

原型链

原型链的基本思想就是利用原型让一个引用类型继承另一个引用类型的属性和方法。

JavaScript引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefined。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是原型语言 只有对象,没有类;对象继承对象,而不是类继承类。 “原型对象”是核心概念。原型对象是新对象的模板,...
    zhoulujun阅读 6,902评论 0 12
  •   面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意...
    霜天晓阅读 6,490评论 0 6
  • 全局对象Window ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对...
    Grit0821阅读 4,587评论 0 3
  • JS中原型链,说简单也简单。 首先明确: 函数(Function)才有prototype属性,对象(除Object...
    前小白阅读 9,408评论 0 9
  • 姓名:廉超~公司:上海缘缀包装 【日精进打卡第95天】 【知~学习】 《六项精进》1遍 《大学》遍 《活法》读完1...
    上海缘缀廉超阅读 1,531评论 0 0

友情链接更多精彩内容