javascript - js中get set 的用处体现在哪里?死循环?
PHP中文网
PHP中文网 2017-04-11 11:57:46
[JavaScript讨论组]
var cart = {
  _wheels: 4,

  get _wheels () {
    return this._wheels;//Maximum call stack size exceeded
  },

  set _wheels (value) {
    if (value < this._wheels) {
      throw new Error('数值太小了!');
    }
    this._wheels = value;
  }
}
console.log(cart._wheels);
cart._wheels = 1;
console.log(cart._wheels);
PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
黄舟

建议看看这篇文章:关于JavaScript中Get/Set访问器
然后就是,我把你这段代码复制进我的 VS Code 中时,显示是这样的:

所以,一个好的编辑器能够帮你直接发现问题。

怪我咯

讲道理,你设置的setter和getter明明是wheels,但是你下面取值赋值用的_wheels,压根没用set/get好吧

天蓬老师

单纯这样用一个对象达到保护私有变量的目的是办不到的,需要将内容写在一个闭包里面。

var car = (function(){
            var _wheels = 4;

            return {
                setWheels : function(value){
                    if (value < _wheels) {
                      throw new Error('数值太小了!');
                    }
                    _wheels = value;
                },
                getWheels : function(){
                    return _wheels;
                }
            }

        })();

你上述的方法,调用car._wheels的时候实际上是在调用get方法,get方法里的this._wheels又相当于调用了car._wheels,就是死循环

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号