博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js原型理解和其作用之一:共享数据,节省内存空间
阅读量:5798 次
发布时间:2019-06-18

本文共 1509 字,大约阅读时间需要 5 分钟。

原型

js虽然是一门基于对象的语言,但它也是可以把任何事物当成对象。在对象中,也分有函数对象和实例对象,函数对象也就是所说的构造函数。

构造函数中有prototype这个属性,它是构造函数的原型,也是一个原型对象,这个属性是给程序员使用,是标准的属性------>prototype--->可以叫原型对象

实例对象中有__proto__这个属性,它是实例对象的原型,也是一个原型对象,这个属性是给浏览器使用,不是标准的属性,因为有些浏览器是不支持程序员使用这个__proto__属性的。

知识点

1. 实例对象中的__proto__这个原型,与其构造函数的prototype原型,是相等的
即:实例对象.__proto__ == 其构造函数.prototype ====》 true
因为实例对象是通过构造函数来创建的,构造函数中有原型对象prototype,实例对象的__proto__指向了构造函数的原型对象prototype。
  1. 利用原型进行数据共享,每一个由构造函数创建出来的实例对象都是不相等的,如
function Person(name){	this.name = name;	this.eat = function(){		console.log("food");	}}var per1 = new Person("1");var per2 = new Person("2");console.log(per1.eat == per2.eat);//输出结果:fales复制代码

这里的per1.eat 和per2.eat都是指向各自内存空间中的eat方法,这将会浪费大量的内存空间,若要解决此问题,则可使用原型好解决

function Person(name){	this.name = name;}Person.prototype.eat = function(){    console.log("food");}var per1 = new Person("1");var per2 = new Person("2");console.log(per1.eat == per2.eat);//输出结果:true复制代码

此时per1.eat 和per2.eat都是指向原型中的eat方法,节省了内存空间。

  1. 构造函数、实例对象和原型对象三者之间的关系
    3.1 实例对象是由构造函数创建出来的
    3.2 构造函数中有一个属性叫prototype,是构造函数的原型对象
    3.3 构造函数的原型对象(prototype)中有一个constructor构造器,这个构造器指向的就是自己的构造函数,即反指回来
    3.4 实例对象的原型对象(__proto__)指向的是其构造函数的原型对象
    3.5 构造函数的原型对象(prototype)中的方法是可以被实例对象直接访问的
    三者关系图如下:
  2. 原型中的this,指向的是实例对象
  3. 原型的简单语法
构造函数.prototype = {    constructor:构造函数, //注意:这个属性必不可少,否则原型中会丢失构造器    属性:值,    方法名:函数}复制代码
  1. 理解了原型之后,通过原型,我们也可以对系统的内置对象添加方法
  2. 实例对象调用原型中的属性或方法时,原本是实例对象.__proto__.属性\方法,但是__proto__并不是个标准的格式,所以实例对象调用原型中的属性\方法时,可以省略__proto__,直接是“实例对象.属性\方法”。

转载于:https://juejin.im/post/5bf4af24f265da615e05165c

你可能感兴趣的文章
《计算复杂性:现代方法》——2.5 判定与搜索
查看>>
《告别失控:软件开发团队管理必读》一一第2章 理解程序员
查看>>
《CCNP ROUTE 300-101学习指南》——1.5节实施RIPng
查看>>
Kotlin 空降“上位”已满月,有对你带来变化吗?
查看>>
TIOBE 2015年11月编程语言排行,Java 超 20%
查看>>
iOS 在 Flash 中集成消息推送服务 【已翻译100%】
查看>>
《Adobe Premiere Pro CC经典教程》——第2课 设置项目 2.1 开始
查看>>
Mozilla 战略性投资隐私浏览器 Cliqz
查看>>
《编写高质量代码:改善c程序代码的125个建议》——建议6-1:掌握typedef的4种应用形式...
查看>>
《数据分析实战:基于EXCEL和SPSS系列工具的实践》一第3章
查看>>
《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一2.10  均分法
查看>>
《Adobe Illustrator CC经典教程》—第2课2.7节复习
查看>>
每个 JavaScript 开发者都该懂的 Unicode
查看>>
《Python数据科学实践指南》——1.3 第一段Python程序
查看>>
《OpenGL编程指南》一2.1 着色器与OpenGL
查看>>
《iOS应用软件设计之道》—— 1.9 iOS与特色
查看>>
《计算机存储与外设》----第2章 Computer Organization and Architecture: Themes and Variations 主 存 储 器 2.1 简介...
查看>>
因微信支付API对IPv6支持不完整引起的一次故障
查看>>
《PHP和MySQL Web开发从新手到高手(第5版)》一一2.3 SQL语言
查看>>
“云”让数据更安全 大数据本科生明年招生
查看>>