- 23
- 0
如题,
学习JS的数据结构和算法——集合,然后学着写了这样一个模拟ES6的Set的结构:
function mySet(){
var items = {};
this.Has = function(value){
return items.hasOwnProperty(value);
}
this.Add = function(value){
if(this.Has(value)) return false;
items[value] = value;
return true;
}
this.Remove = function(value){
if(this.Has(value)){
delete items[value];
return true;
}
return false;
}
this.Clear = function(){
items = {};
}
this.Size = function(){
return Object.keys(items).length;
};
this.Values = function(){
var values = [];
Object.keys(items).forEach(function(key){
values.push(items[key]);
});
return values;
}
}
module.exports = {
Sets: mySet
}
然后测试了一下,可以正常获得对应的值。
let s = new Sets();
s.Add(1);
s.Add(2);
s.Add('time');
console.log(s.Add(2));
console.log(s.Add(4));
console.log(s.Has('time'));
console.log(s.Remove('time'));
console.log(s.Remove('3'));
console.log(s.Add(3));
console.log(s.Values());
console.log(s.Size());
得到结果:
false
true
true
true
false
true
[ 1, 2, 3, 4 ]
4
然后我就觉得这样写好像不太舒服,因为一般写属性都是直接用属性名就可以获得对应的结果了,所以我尝试添加了一个size直接获得集合的尺寸值:
Object.defineProperty(mySet.prototype, 'size', {
get() {
return this.Size();
}
});
测试console.log(s.size);后可以得到结果4
然后我就想到了这样一个问题,能不能只用一个size就实现"一值两用"——既可以实现console.log(s.size);又可以显示console.log(s.size());呢?
我尝试把上面的Size改成size,然后node报错:
get() {
^
RangeError: Maximum call stack size exceeded
看来并不是这么简单啊……Orz……
请问ES5是否能实现这种“一值两用”?怎么实现?
谢谢=_=
- 共 0 条
- 全部回答
-
用钱买、真情 普通会员 1楼
是的,JavaScript 5(ES5)可以实现“一值两用”。在ES5中,函数的返回值是一个对象,这意味着它可以是任何值,但必须是JavaScript对象或布尔值。
例如,你可以这样定义一个函数,该函数返回一个布尔值:
javascript function isTrue(value) { return value === true; }然后,你可以像这样调用这个函数:
javascript console.log(isTrue(true)); // 输出 true console.log(isTrue(false)); // 输出 false然而,需要注意的是,这种行为并不是JavaScript语言的标准行为。在ES5中,函数的返回值应该是一个有效的JavaScript值,例如字符串、数字、布尔值等。如果你试图返回一个未定义的值(例如null、undefined或null),那么JavaScript会抛出一个错误。因此,如果你需要“一值两用”,你可能需要考虑使用更复杂的数据结构或函数。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
