首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Javascript原型中,有没有办法在不浪费内存的同时利用信息隐藏?

在Javascript原型中,可以利用闭包来实现信息隐藏,而不浪费内存。闭包是指函数可以访问并操作其外部函数作用域中的变量。通过在构造函数中定义私有变量,并在原型中定义公共方法来访问和操作这些私有变量,可以实现信息隐藏。

下面是一个示例代码:

代码语言:txt
复制
function Person(name, age) {
  // 私有变量
  var _name = name;
  var _age = age;

  // 公共方法
  Person.prototype.getName = function() {
    return _name;
  };

  Person.prototype.getAge = function() {
    return _age;
  };
}

var person = new Person("John", 25);
console.log(person.getName()); // 输出 "John"
console.log(person.getAge()); // 输出 25
console.log(person._name); // undefined,私有变量无法直接访问
console.log(person._age); // undefined,私有变量无法直接访问

在上述代码中,_name_age是私有变量,只能通过getNamegetAge方法来访问。这样可以隐藏这些私有变量,避免被外部直接访问和修改。

推荐的腾讯云相关产品:腾讯云函数(云函数是一种无服务器的事件驱动型计算服务,可以在云端运行代码而无需购买和管理服务器),产品介绍链接地址:https://cloud.tencent.com/product/scf

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

创建一个欢迎 cookie 利用用户提示框输入数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 信息发出欢迎信息。…

创建一个欢迎 cookie 利用用户提示框输入数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 信息发出欢迎信息。...cookie 是存储于访问者计算机变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 值。...欢迎词。而名字则是从 cookie 取回。 密码 cookie 当访问者首次访问页面时,他或她也许会填写他/她们密码。密码也可被存储于 cookie 。...当他们再次访问网站时,密码就会从 cookie 取回。 日期 cookie 当访问者首次访问你网站时,当前日期可存储于 cookie 。...日期也是从 cookie 取回

2.6K10

如何使用 javascript 面向对象编程来唬住面试官(part 2)

续上一集内容,通过构造函数方式,成功地更新了生产技术,老板笑呵呵,工人少奔波,只是问题总比办法多,又遇到一个新问题,就是会造成一些资源重复和浪费,那么经过工程师们智慧交流,他们产生了一个新技术,原型模式...理解什么是原型 javascript 原型是一个属性,一般我们叫他原型属性 prototype,这个属性是一个内存指针,指向一个对象,而这个对象用途是包含可以由特定类型所有实例共享属性和方法。...一般 javascript 运行过程,在所有对象被创建之前,会预先创建一个 global object,里面包含了所有这个 javascript 引擎里面拥有的属性和方法,这个也叫做 global...例如,要确认 person1有没有 sayName 方法,那么javascript 引擎会先对person1对象本身进行搜索,如果有就直接返回,如果没有就继续搜索他原型对象 Person Prototype...name: '苹果', }; 如果写constructor的话,Food.prototypeconstructor就不再指向 Food ,这样就没办法通过constructor来识别得到改对象实例是属于哪个原型对象了

71220

每天10个前端小知识 【Day 6】

Js数组是如何在内存存储? 数组不是以一组连续区域存储在内存,而是一种哈希映射形式。它可以通过多种数据结构来实现,其中一种是链表。 4....移动端点击有 300ms 延迟是因为移动端会有双击缩放这个操作,因此浏览器 click 之后要等待 300ms,看用户有没有下一次点击,来判断这次操作是不是双击。...click 延时问题还可能引起点击穿透问题,就是如果我们一个元素上注册了 touchStart 监听事件,这个事件会将这个元素隐藏掉,我们发现当这个元素隐藏后,触发了这个元素下一个元素点击事件...in 获取是对象键名; for… in 会遍历对象整个原型链,性能非常差推荐使用,而 for … of 只遍历当前对象不会遍历原型链; 对于数组遍历,for…in 会返回数组中所有可枚举属性... JavaScript ,NaN 最特殊地方就是,我们不能使用相等运算符(== (en-US) 和 === (en-US))来判断一个值是否是 NaN,因为 NaN == NaN 和 NaN ==

9110

前端常见20道高频面试题深入解析

创建子类型实例时,没有办法不影响所有对象实例情况下给超类型构造函数传递参数。 2. 借用构造函数 借用构造函数技术,其基本思想为: 子类型构造函数调用超类型构造函数。...原型式继承 原型继承基本思想: 借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。...避免 SuberType.prototype上面创建不必要、多余属性,与其同时原型链还能保持不变。 因此寄生组合继承是引用类型最理性继承范式。 10. 隐藏页面某个元素方法有哪些?...这里有一个非常重要点即是:JS,复杂数据类型,存储是堆内存地址,存在栈这个地址是不变,但是存在堆值是可以变得。...有没有相当常量指针/指针常量~ 一图胜万言,如下图所示,不变是栈内存 a 存储 20,和 b 存储 0x0012ff21(瞎编一个数字)。

1.2K30

求职 | 史上最全web前端面试题汇总及答案2

当display为none、visibility为hidden时都会隐藏元素。但display会隐藏掉元素空间,visibility会保留元素空间。 6、怎么在网页实现绝对定位?...①创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数原型。 ②属性和方法被加入到 this 引用对象。 ③新创建对象由 this 所引用,并且最后隐式返回 this 。...我们举例说明:比如一个黑客程序,他利用Iframe把真正银行登录页面嵌到他页面上,当你使用真实用户名,密码登录时,他页面就可以通过Javascript读取到你表单input内容,这样用户名...7、你项目中有使用到网页到服务器即时通信吗?说说你都采用什么手段处理以及你所知道处理办法?...②线程划分尺度小于进程,使得多线程程序并发性高。 ③另外,进程执行过程拥有独立内存单元,而多个线程共享内存,从而极大地提高了程序运行效率。 ④线程执行过程与进程还是有区别的。

6K20

JS入门难点解析10-创建对象

使用构造函数主要问题是每个方法都要在每个实例上重新创建一遍,创建多个完成相同任务方法完全没有必要,浪费内存空间。那么,最简单办法,把函数方法定义在外部不就行了么。...寄生构造函数模式与构造函数模式有相同问题,每个方法都要在每个实例上重新创建一遍,创建多个完成相同任务方法完全没有必要,浪费内存空间。...换句话说,不必构造函数定义对象实例信息,而是可以将这些信息直接添加到原型对象。就好像做了一个模具,直接把信息刻在模具,就可以利用该模具实现复制量产了。...构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性,这种组合模式还支持向构造函数传递参数。实例对象都有自己一份实例属性副本,同时又共享对方法引用,最大限度地节省了内存。...注意,使用动态原型模式时: 如果原型对象包含多个语句,只需要检测其中一个语句即可。 不能使用对象字面量重写原型。因为已经创建了实例情况下重写原型,就会切断现有实例与新原型联系。

1.4K30

献给前端求职路上你们(下)

1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数原型。 2、属性和方法被加入到 this 引用对象。...__proto__ = Base.prototype;Base.call(obj); Javascript,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?...简单内存图 那些操作会造成内存泄漏? 内存泄漏指任何对象您不再拥有或需要它之后仍然存在。 垃圾回收器定期扫描对象,并计算引用了每个对象其他对象数量。...(阿里) 通过判断Global对象是否为window,如果不为window,当前脚本没有运行在浏览器 当然,面试,除了要知道这些基础知识外,很多时候需要是你工作经验,你有没有?...清晰视觉纵线、信息分组、极致减法、 利用选择代替输入、标签及文字排布方式、 依靠明文确认密码、合理键盘利用面试,其实是一个互动环节,不仅要回答问题,也要抓住机会,获得主动权,想问公司一些问题

1.1K60

我来重新学习 javascript 面向对象(part 4)

一、继承-原型链 继承是 OOP 开发一个极为重要概念,而在javascript 里面,实现继承方式主要依靠原型链来实现。 ?...(怎么看这个图,可以翻看之前一集介绍原型内容) 下面需要注意一些原型对象问题和技巧 1.1 确定原型和实例关系 没办法准确知道是继承于哪一个,只要是链条里面的,都会被认为是继承过来。...原型链另外一个问题是,创建子类型实例时,不能向超类型构造函数传递参数,或者说,是没办法不影响所有对象实例情况下,给超类型构造函数传递参数。...基于以上2个问题,导致了实际环境,很少会单独使用原型链,会结合其他方式来使用原型链,毕竟 javascript 里,所有的继承其实也是以原型链为基础。...利用了 call(或者 apply 或者 bind 这种函数)改变了构造函数 this 指向,才得以实现上面说到将不同构造函数放到同一个执行环境执行。

31710

整理了近期阿里携程面试题,分享给大家(后期会慢慢完善)

)简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈存储; 引用数据类型存储堆(heap)对象,占据空间大、大小固定。...如何编写高性能javascript? 那些操作会造成内存泄漏? 内存泄漏指任何对象您不再拥有或需要它之后仍然存在。 垃圾回收器定期扫描对象,并计算引用了每个对象其他对象数量。...生活实例: 我们知道目前一种说法是当 1 秒内连续播放 24 张以上图片时,人眼视觉中就会形成一个连贯动画,所以电影播放(以前是,现在不知道)基本是以每秒 24 张速度播放,为什么...- 堆 两种数据类型存储位置不同 原始数据类型是直接存储栈(stack)简单数据段,占据空间小、大小固定,属于被频繁使用数据; 引用数据类型存储堆(heap)对象,占据空间大、大小固定,如果存储...事件代理/委托 事件委托是指将事件绑定目标元素到父元素上,利用冒泡机制触发该事件 优点: 可以减少事件注册,节省大量内存占用 可以将事件应用于动态添加子元素上 缺点: 使用不当会造成事件不应该触发时触发

1.6K21

JS面向对象详解

封装:就是把事物封装成类,隐藏事物属性和方法实现细节,仅对外公开接口。 ES5,并没有class概念,但是由于js函数级作用域(函数内部变量函数外访问不到)。所以我们可以模拟class。...所以我们实例化一个新对象时候,this指向属性和方法都会得到相应创建,也就是会在内存复制一份,这样就造成了内存浪费。...this方式添加属性和方法会导致内存浪费现象,有什么办法可以让实例化类所使用属性和方法 直接使用指针 指向同一个属性和方法。...这样子类就可以访问父类属性和方法,同时,父类定义属性和方法不会被子类继承。...,既避免了内存浪费,又使得每个实例化子类互不影响。

2.3K31

深入JavaScript原型链污染

也就是占了两片内存,这样每次新建一个对象,都会为show函数新开辟一段内存浪费空间。...为了让两个对象上 show 方法是同一个,我们可以利用函数 prototype 属性(原型对象,后文会提到),这是每个函数都具有的属性。...不信我们将foo1打印出来看看(注意不同浏览器结果不一样) Prototype 属性 JavaScript Prototype 是每个对象内部一个隐藏属性,它是对另一个对象引用,被称为这个对象...[[Prototype]] 属性日常编程通常直接访问。大多数现代浏览器,可以使用 __proto__ 属性访问它,但这并不推荐,因为它不是所有环境都支持标准属性。...JavaScript原型继承 从上一节可以看到,所有类对象实例化时候将会拥有原型对象属性和方法,这个特性被用来实现JavaScript继承机制。

17610

JavaScript 进阶教程(1)--面向对象编程

面向对象程序开发思想,每一个对象都是功能中心,具有明确分工,可以完成接受信息、处理数据、发出信息等任务。...面向对象特性: 封装性 继承性 多态性 2.3 JavaScript 面向对象基本体现 JavaScript ,所有数据类型都可以视为对象,当然也可以自定义对象。...每一个实例对象_proto_同时有一个 constructor 属性,该属性指向创建该实例构造函数: console.log(p1.constructor === Person) // =>...那就是对于每一个实例对象,type 和 sayHello 都是一模一样内容, 每一次生成一个实例,都必须为重复内容,多占用一些内存,如果实例对象很多,会造成极大内存浪费。...console.log(p1.sayHello === p2.sayHello) // => true console.log(p1.sayAge === p2.sayAge) // => true 至此,我们利用自己方式基本上解决了构造函数内存浪费问题

49042

2019年初 JS面试必考(概率大)面试题

原始数据类型是直接存储栈(stack)简单数据段,占据空间小、大小固定,属于被频繁使用数据; 引用数据类型存储堆(heap)对象,占据空间大、大小固定,如果存储,将会影响程序运行性能...创建实例对象,this 变量引用该对象,同时还继承了构造函数原型 属性和方法被加入到 this 引用对象 新创建对象由 this 所引用,并且最后隐式返回 this 用原生 JavaScript...这时这些本来是严格模式文件,被 merge 后,这个串就到了文件中间,不仅没有指示严格模式,反而在压缩后浪费了字节 实现一个函数 clone,可以对 JavaScript 5 种主要数据类型...还有一点是需要我们注意,那就是外部引入脚本(script)会阻塞浏览器并行下载,HTTP/1.1规范表明,浏览器每个主机下并行下载组件超过两个(也就是说,浏览器一次只能够同时从同一个服务器加载两个脚本...我们设想一下,如果 JavaScript 是多线程,现在我们浏览器同时操作一个 DOM,一个线程要求浏览器在这个 DOM 添加节点,而另一个线程却要求浏览器删掉这个 DOM 节点,那这个时候浏览器就会很郁闷

95020

从一道面试题引发原理性探究

V8 私有符号类似于Symbol,只是它不可枚举,也不会不会泄漏到用户空间 JavaScript 。...也就是说这个 symbol 只 V8 引擎内部使用,用户 JavaScript 代码访问不到。...有关这些更多信息,请参见 Camillo Bruni V8 博客文章。...但是,对于那些没有添加到哈希表对象,这会浪费内存。相反,我们可以尝试将散列码存储元素存储或属性存储。 元素存储是一个包含其长度和所有元素数组。...在这里没有太多工作要做,因为可以把哈希码存储一个保留(比如第 0 个索引),不过,当我们不使用这个对象作为哈希表关键字时,仍然会浪费内存。 让我们看看属性存储。

1.4K20

JavaScript高级程序设计-性能整理(一)

4.3.4 内存管理 使用垃圾回收编程环境,开发者通常无须关心内存管理。不过,JavaScript 运行在一个内存管理与垃圾回收都很特殊环境。...这个内存限制不仅影响变量分配,也影响调用栈以及能够同时一个线程执行语句数量。 将内存占用量保持一个较小值可以让页面性能更好。优化内存占用最佳手段就是保证执行代码时只保存必要数据。...截至 2017 年,Chrome 是最流行浏览器,使用 V8 JavaScript 引擎。V8 将解释后 JavaScript代码编译为实际机器码时会利用隐藏类”。... WebGL 早期版本,因为 JavaScript 数组与原生数组之间匹配,所以出现了性能问题。...JavaScript 运行时可以简单地嵌套函数 存储指向包含函数指针,就跟对待同步函数调用栈一样。这个指针实际上存储在内存,可用于在出错时生成栈追踪信息

64820

浏览器是如何工作:Chrome V8让你更懂JavaScript

,即解释器,负责将 AST 转换为 Bytecode,解释执行 Bytecode;同时收集 TurboFan 优化编译所需信息,比如函数参数类型;解释器执行时主要有四个模块,内存字节码、寄存器、...栈空间主要是用来管理 JavaScript 函数调用,栈是内存连续一块空间,同时栈结构是“先进后出”策略。...继承 继承就是一个对象可以访问另外一个对象属性和方法, JavaScript ,我们通过原型原型方式来实现了继承特性。...JavaScript 每个对象都包含了一个隐藏属性 __proto__ ,我们就把该隐藏属性 __proto__ 称之为该对象原型 (prototype),__proto__ 指向了内存另外一个对象...第三步,做内存整理。一般来说,频繁回收对象后,内存中就会存在大量连续空间,我们把这些连续内存空间称为内存碎片。

1.2K41

浏览器是如何工作:Chrome V8 让你更懂 JavaScript

,即解释器,负责将 AST 转换为 Bytecode,解释执行 Bytecode;同时收集 TurboFan 优化编译所需信息,比如函数参数类型;解释器执行时主要有四个模块,内存字节码、寄存器、...栈空间主要是用来管理 JavaScript 函数调用,栈是内存连续一块空间,同时栈结构是“先进后出”策略。...继承 继承就是一个对象可以访问另外一个对象属性和方法, JavaScript ,我们通过原型原型方式来实现了继承特性。...JavaScript 每个对象都包含了一个隐藏属性 __proto__ ,我们就把该隐藏属性 __proto__ 称之为该对象原型 (prototype),__proto__ 指向了内存另外一个对象...第三步,做内存整理。一般来说,频繁回收对象后,内存中就会存在大量连续空间,我们把这些连续内存空间称为内存碎片。

84620

浏览器是如何工作:Chrome V8让你更懂JavaScript

,即解释器,负责将 AST 转换为 Bytecode,解释执行 Bytecode;同时收集 TurboFan 优化编译所需信息,比如函数参数类型;解释器执行时主要有四个模块,内存字节码、寄存器、...栈空间主要是用来管理 JavaScript 函数调用,栈是内存连续一块空间,同时栈结构是“先进后出”策略。...继承 继承就是一个对象可以访问另外一个对象属性和方法, JavaScript ,我们通过原型原型方式来实现了继承特性。...JavaScript 每个对象都包含了一个隐藏属性 __proto__ ,我们就把该隐藏属性 __proto__ 称之为该对象原型 (prototype),__proto__ 指向了内存另外一个对象...第三步,做内存整理。一般来说,频繁回收对象后,内存中就会存在大量连续空间,我们把这些连续内存空间称为内存碎片。

1.3K41

Node.js生态系统隐藏属性滥用攻击

上述传播过程使攻击者能够通过劫持constructor继承链来禁用输入验证逻辑。 JavaScript ,每个对象都有一个指向原型对象链接。...如果 LYNX 检测到接收器可达,则 LYNX 将同时报告漏洞利用 exp 和攻击后果指标 ind。为了演示整个过程,将算法应用于运行示例。如前图所示,LYNX 第 14 行符号化隐藏属性构造函数。...这 11 个基于 Web 程序中有 7 个同时支持查询字符串和 JSON 序列化(不同 API )。...然而,与索引相关约束是在内存而不是代码。因此,即使索引采用易于猜测格式(例如,T000002R000001),LYNX 也无法构建有效索引。这种失败源于符号执行限制。...可以通过扩展 LYNX 来同时探索多个变量(不仅是隐藏属性,还有记录参数)来解决此类故障。最后一种失败来自语法兼容问题。

18220

JavaScript笔记(2) 构造函数和原型

构造函数和原型 目标: 这些之前都学过我就不多赘述了,直接将图片贴上来了 JavaScript构造函数可以添加一些成员,可以构造函数本身上添加,也可以构造函数内部this上添加....现在写一个例子来认识这两种成员 (偷偷换了个主题哦) 构造函数很好用,但是存在浪费内存问题: 分别有两个对象,但是这两个对象里同一个方法却都开辟了新内存空间,这不仅浪费内存浪费时间...可以看到prototype里面有一个原型对象 我们可以把那些不变方法,重新定义prototype对象上,这样所有对象实例就可以共享这些方法....或者说一条线路,但是它是一个非标准属性,因此实际开发,不可以使用这个属性,它只是内部指向原型对象prototype....所以现在我们做一步操作,手动利用constructor指回原来构造函数 构造函数,原型对象,实例之间关系 说到底这一节听懵逼,晚点查查资料,明天继续,晚上复习

36810

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券