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

在JavaScript ES6类中对"set function()“的无限期调用

在JavaScript ES6类中,对"set function()"的无限期调用是指在类的setter方法中无限递归调用自身的情况。

当我们在类中定义一个setter方法时,可以使用"set"关键字加上一个函数名来定义该属性的设置方法。这个setter方法会在给属性赋值时自动调用。

然而,如果在setter方法中不小心调用了自身,就会导致无限递归调用的情况发生。这会导致程序陷入无限循环,最终导致堆栈溢出错误(stack overflow error)。

以下是一个示例代码,展示了对"set function()"的无限期调用:

代码语言:txt
复制
class MyClass {
  constructor() {
    this._myProperty = 0;
  }

  set myProperty(value) {
    this.myProperty = value; // 无限递归调用
  }
}

const myObject = new MyClass();
myObject.myProperty = 10; // 无限递归调用,导致堆栈溢出错误

在上面的示例中,setter方法"myProperty"中的赋值语句this.myProperty = value;实际上是在调用自身,而不是给属性赋值。这样就会导致无限递归调用,最终导致堆栈溢出错误。

为了避免这种情况发生,我们应该在setter方法中使用不同的属性名来存储值,而不是直接调用自身。例如,可以使用下划线前缀来表示私有属性:

代码语言:txt
复制
class MyClass {
  constructor() {
    this._myProperty = 0;
  }

  set myProperty(value) {
    this._myProperty = value; // 使用不同的属性名存储值
  }
}

const myObject = new MyClass();
myObject.myProperty = 10; // 正确赋值,不会发生无限递归调用

在上面的修正后的示例中,setter方法"myProperty"将值存储在私有属性"_myProperty"中,避免了无限递归调用的问题。

总结: 在JavaScript ES6类中,对"set function()"的无限期调用是指在类的setter方法中无限递归调用自身的情况。为了避免这种情况发生,应该在setter方法中使用不同的属性名来存储值,而不是直接调用自身。

相关链接:

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

相关·内容

javascriptfunction调用参数检测常用办法

1.方法重载 js并不直接支持类似c#方法重载,所以只能变相来解决,示意代码:(利用了内置属性arguments) var f1 = function(p1,p2,p3){ switch(arguments.length...调用时,强制检查参数个数,所以只能自己处理,示例代码: var fnMustOneParam = function(p){ //检测有没有参数传入 if (typeof p=="undefined...; return; } //to do... } //fnMustOneParam(1,3,4);  3.参数基本类型检测 js引擎同样更不会检测参数类型,如果您希望参数基本类型做些限制...; return ; } } //fnString(123);  4.自定义参数类型检测 第3条所提到方法,只能检测参数基本类型,如果是自定义参数,如果用typeof运算符号,...; } else{ alert("必须传入一个Person类型参数才能调用!")

1.1K80

【前端】Javascript高级篇-ES6和对象三个注意

文章目录 ES6没有变量提升 公用属性使用必须加this....调用属性,错误实例 调用方法,错误实例 点击按钮-练习this 探究this代表什么 总结 ES6没有变量提升 实例对象创建,必须先创建 错误实例 ? ? 公用属性使用必须加this....当前实例对象属性或方法,必须用this指向或调用 调用属性,错误实例 ? ? 调用方法,错误实例 加this. ? ?...点击按钮-练习this 注意sing没加(),因为需要效果是点击后才调用 ? ? 为什么没输出名字?思考一下 探究this代表什么 ? ?...true this,指就是所创建实例对象 ? ? dancethis指向调用者,刘德华 sing指向调用点击btn ? ?

37940

关于使用MethodHandle子类调用祖父重写方法探究

关于使用MethodHandle子类调用祖父重写方法探究 注:这个例子原本出现在周志明先生《深入理解Java虚拟机》--虚拟机字节码执行引擎章节,介于有读者朋友有疑问,这里基于Java代码层面解释一下...这里直接看Sonthinking方法(关于为何这样实现,《深入理解Java虚拟机》读书笔记(七)--虚拟机字节码执行引擎(下)也解释了)。...普通方法调用,这个this参数是虚拟机自动处理,表示是当前实例对象,我们方法可以直接使用。...但是我们这个MethodHandle例子,相当于是模拟了invoke*指令处理,手动调用invoke方法就需要指定这个"this"参数。...基于这个事实,我们这时可以直接在GrandFatherthinking方法调用Son独有的方法,使用反射或者直接类型强制转换为Son就行了。

9.4K30

C++反射调用.NET(一) 反射调用第一个.NET方法

为什么要在C++调用.NET 一般情况下,我们常常会在.NET程序调用C/C++程序,使用P/Invoke方式进行调用,在编写代码代码时候,首先要导入DLL文件,然后根据C/C++头文件编写特殊...extern int Multiply(int factorA, int factorB); 详细过程,可以参考之前我这篇文章:《C#调用C和C++函数一点区别》 有时候,我们也会有C++调用...注意,本文说C++反射调用,不是C++自身进行封装反射功能,而是C++/CLI代码反射调用.NET代码,原理上跟你.NET应用反射调用另外一个.NET程序集一个道理。...C++成员用 -> 符号调用,命名空间或者静态成员,用::调用,例如上面的构造函数代码: Assembly^ ass = Assembly::LoadFrom(this->assemblyFile...C++/CLI中使用反射 反射调用第一个.NET方法 下面的方法,将会反射调用 User一个最简单方法 : public int GetUserID(string IdString){} 该方法只有一个一个参数和一个简单返回值

3.2K100

ES6 主要新特性

支持 ES6添加了支持,引入了class关键字(其实classJavaScript中一直是保留字,目的就是考虑到可能在以后新版本中会用到,现在终于派上用场了)。...JS本身就是面向对象ES6提供实际上只是JS原型模式包装。现在提供原生class支持后,对象创建,继承更加直观了,并且父方法调用,实例化,静态方法和构造函数等概念都更加形象化。...下面代码展示了ES6使用。再次啰嗦一句,你可以将代码贴到traceur自己查看运行结果。...具体表现在: 可以在对象字面量里面定义原型 定义方法可以不用function关键字 直接调用方法 这样一来,对象字面量与前面提到概念更加吻合,在编写面向对象JavaScript时更加轻松方便了...generator 函数是通过function*来声明 yield 关键字:它可以暂停函数执行,随后可以再进进入函数继续执行 模块 ES6标准JavaScript原生支持module了。

98890

20个ES6面试高频问题

function multiply (a, b = 2) { return a * b;}multiply(5); // 10 定义与继承 ES6 引入了(class关键字)、构造函数(constructor..., studentID) { // 调用构造函数以初始化你派生成员。...问题 13: ES6 临时死区是什么 主题: JavaScript难度: ⭐⭐⭐⭐ ES6 ,let 和const 跟 var、class和function一样也会被提升,只是进入作用域和被声明之间有一段时间不能访问它们...主题: JavaScript难度: ⭐⭐⭐⭐ 模块模式通常用于命名空间,该模式,使用单个实例作为存储来相关函数和对象进行分组。...对于手动编写 Map,数组将保留键对象引用,以防止被垃圾回收。但在WeakMap键对象引用被“弱”保留,这意味着没有其他对象引用情况下,它们不会阻止垃圾回收。

1.2K40

通过 20 个棘手ES6面试问题来提高咱们 JS 技能

function multiply (a, b = 2) { return a * b; } multiply(5); // 10 定义与继承 ES6 引入了(class关键字)、构造函数...name, studentID) { // 调用构造函数以初始化你派生成员。...问题 13: ES6 临时死区是什么 主题: JavaScript 难度: ⭐⭐⭐⭐ ES6 ,let 和const 跟 var、class和function一样也会被提升,只是进入作用域和被声明之间有一段时间不能访问它们...主题: JavaScript 难度: ⭐⭐⭐⭐ 模块模式通常用于命名空间,该模式,使用单个实例作为存储来相关函数和对象进行分组。...对于手动编写 Map,数组将保留键对象引用,以防止被垃圾回收。但在WeakMap键对象引用被“弱”保留,这意味着没有其他对象引用情况下,它们不会阻止垃圾回收。

82210

JavaScript快速入门

HTMLJavaScript 单独写JavaScript 注释 基本语法入门 变量 条件控制 调试 数据类型 map set iterator 函数 let,const,var 日期Date JSON...JavaScript是世界上最流行脚本语言 Javascript历史 大部分浏览器支持es5代码,开发环境–线上环境,版本不一致 HTMLJavaScript <!...动态添加 person.hhh = “hahaha”; 判断属性值是否在这个对象 'age' in person //判断age是否person Map和Set ES6才出来...:模板 对象:具体实例 可以说是对象抽象,对象是具体实现,也可以想为,女生是一个,你女朋友是这个大类具体一员 JS: 不是一种真正面向对象编程(OOP)语言,因为它语法没有...class()—–es6以前是这样

66720

ECMAScript6介绍及环境搭建

1、ES6简介 1.1、什么是ES6 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言下一代标准,已经 2015 年 6 月正式发布了。...ES6 明确规定,如果区块存在let和const命令,这个区块这些命令声明变量,从一开始就形成了封闭作用域。凡是声明之前就使用这些变量,就会报错。...这是必须,否则 JavaScript 引擎会报错。 第二种情况,super作为对象时,普通方法,指向父原型对象;静态方法,指向父。...上面代码,FooclassMethod方法前有static关键字,表明该方法是一个静态方法,可以直接在Foo调用(Foo.classMethod()),而不是Foo实例上调用。... JavaScript 事件队列的当前运行完成之前,回调函数永远不会被调用

1.7K40

(转)ES6新特性概览

支持 ES6添加了支持,引入了class关键字(其实classJavaScript中一直是保留字,目的就是考虑到可能在以后新版本中会用到,现在终于派上用场了)。...JS本身就是面向对象ES6提供实际上只是JS原型模式包装。现在提供原生class支持后,对象创建,继承更加直观了,并且父方法调用,实例化,静态方法和构造函数等概念都更加形象化。...下面代码展示了ES6使用。再次啰嗦一句,你可以将代码贴到traceur自己查看运行结果。...具体表现在: 可以在对象字面量里面定义原型 定义方法可以不用function关键字 直接调用方法 这样一来,对象字面量与前面提到概念更加吻合,在编写面向对象JavaScript时更加轻松方便了...generator 函数是通过function*来声明 yield 关键字:它可以暂停函数执行,随后可以再进进入函数继续执行 模块 ES6标准JavaScript原生支持module了。

93050

ES6新特性概览

array.forEach(v => console.log(v)); 支持 ES6添加了支持,引入了class关 键字(其实classJavaScript中一直是保留字,目的就是考虑到可能在以后新版本中会用到...JS本身就是面向对象 ES6提供实际上只是JS原型模式包装。现在提供原生class支持后,对象创建,继承更加直观了,并且父方法调用,实例化,静态方法和构造函数等概念都更加形象化。...下面代码展示了ES6使用: // 定义 class Animal { // ES6新型构造器 constructor(name) { this.name =...具体表现在: 可以在对象字面量里面定义原型 定义方法可以不用function关键字 直接调用方法 这样一来,对象字面量与前面提到概念更加吻合,在编写面向对象JavaScript时更加轻松方便了...generator 函数是通过function*来声明 yield 关键字:它可以暂停函数执行,随后可以再进进入函数继续执行 模块 ES6标准JavaScript原生支持module了。

978110

用简单方法学习ECMAScript 6

ES5,我们以前会使用两个不同无二字符串来定义常量。我们会不得不依赖于字符串!但众所周知,字符串并不具备唯一性。...undefined, index: -1}; } 默认值和展开运算符 ES6提供了一个新更好定义函数参数默认值方式: // ES5,你是这样定义参数默认值function foo(x,...我来说没有必要把所有逻辑都放进for-of循环来做一个迭代工作,我只需要创建一个有意义可迭代,然后把我逻辑都放在其中,然后我就可以不同地方用for-of循环使用我,并且可以很简单地实现迭代工作...很简单吧~这将使我代码更简洁。 模块 组件定义模块语言层面的支持。从流行JavaScript模块加载器(AMD, CommonJS)整理模式。.... // 链式调用,如果任意一个promise失败,我们仍然通过发生失败promisecatch()方法返回一个默认值来继续执行调用链。

1.7K41

没想到吧,PHP 外部也可以调用私有方法!

一般来说, Class 外部是无法调用私有方法,这也是 Private 字面的意思,但是一些很特殊很特殊情况下,如果需要调用,是否可以呢?其实可以使用反射来实现。...function wpjam_call_method($object, $method, ...$args){ if(!...getClosure($object); } return call_user_func_array($callback, $args); } 简单解释一下,首先还是简单判断该方法是否存在,接着获取对象方法放射...,然后判断一下是不是公共方法,如果是公共就正常调用,不是则获取其闭包,最后使用回调方式来调用。...这个函数可以让你调用对象私有或者受保护方法,建议一些特殊情况下才使用。为了方便大家调用,新版 WPJAM Basic 也会集成该函数。----

99630

看完这几道 JavaScript 面试题,让你与考官对答如流(

为什么调用这个函数时,代码b会变成一个全局变量? 40. ECMAScript是什么? 41. ES6或ECMAScript 2015有哪些新特性?...JavaScript,函数不仅拥有一切传统函数使用方式(声明和调用),而且可以做到像简单值一样赋值(var func = function(){})、传参(function func(x,callback...不仅如此,JavaScript函数还充当了构造函数作用,同时又是一个Function实例(instance)。这样多重身份让JavaScript函数变得非常重要。 34....JavaScript(狭义JavaScript)做什么都要问问ECMAScript我能不能这样干!如果不能我就错了!能我就是!...什么是(class)是 JS 编写构造函数新方法。它是使用构造函数语法糖,底层中使用仍然是原型和基于原型继承。

2K10

【资源集合】 ES6 元编程(Proxy & Reflect & Symbol)

Javascript ,eval、new Function()便是两个可以用来进行元编程特性。不过因为性能和可维护角度上,这两个特性还是不要用为妙。...这里着重推荐几篇,分为教程和手册,通读完之后应该就掌握差不多了。 元编程 ES6 体现最为突出是 Proxy 应用,目前我所找文章也多偏向 Proxy。...本文作者实现了 ES6 Reflect 特性,所以他 ES6 这两个特性理解是最为深刻,他文章自然要深度阅读。...应用教程ES6 Features - 10 Use Cases for Proxy:收集了 10 个 proxy 具体应用场景,具体代码放在 jsProxy 仓库ES6重新认识JavaScript...,递归调用本身就有问题,容易导致内存泄露,实际应用需要改写上述 getFib 函数。

1.1K21

Vue开发中常用ES6新特性

如果在上面的例子中使用var(就像在传统Javascript代码那样)而不是let,就不会出现错误。 const是另一个用于声明变量ES6关键字。...Arrow Function:箭头函数 ES6提供了创建函数,对象和更简单方法。...代码中用了两次super关键字,第一次是构造函数调用构造函数,第二次,像使用对象一样使用它来调用introduce方法。 super关键字行为会因使用位置而异。...`); } } Map / Set / WeakMap / WeakSet ES6新增了两种数据结构:Map和Set Map是键-值集合,并且能够记住键原始插入顺序。...迭代一个Object需要以某种方式获取它键然后才能迭代。 性能 频繁增删键值场景下表现更好 频繁添加和删除键值场景下未作出优化 Set对象就像一个数组,但是仅包含唯一项。

1.3K10
领券