我正在使用新的ES6 Class
关键字,我有一个时髦的场景,给我一些无限循环,最终Maximum call stack size exceeded
。
这是我的班级:
'use strict';
class Group {
set name(newName) {
this.name = newName;
}
}
module.exports = Group;
我用这个mocha测试来调用它:
'use strict';
const expect = require('chai').expect;
describe('Group model', function() {
var Group;
it('should not blow up when requiring', function() {
Group = require('../../models/group');
expect(Group).to.not.be.undefined;
});
describe('create()', function() {
it('should fail with no parameters', function() {
const expected = new Error();
var group = new Group();
//group.name('myName');
group.name = 'myName';
});
});
});
当我运行我的摩卡测试时,我得到了这个打印输出:
1) Group model create() should fail with no parameters:
RangeError: Maximum call stack size exceeded
at onwrite (_stream_writable.js:335:15)
at WritableState.onwrite (_stream_writable.js:89:5)
at WriteStream.Socket._writeGeneric (net.js:684:5)
at WriteStream.Socket._write (net.js:694:8)
at doWrite (_stream_writable.js:292:12)
at writeOrBuffer (_stream_writable.js:278:5)
at WriteStream.Writable.write (_stream_writable.js:207:11)
at WriteStream.Socket.write (net.js:618:40)
at Console.log (console.js:36:16)
at Group.name (models/group.js:122:13)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
at Group.name (models/group.js:123:15)
导致这种无限循环的原因是什么?我能绕过它吗?
仅供我参考node.js 5.1.0
答案 0 :(得分:10)
你的setter属性以递归方式设置自己。尝试更多的内容......
class Group {
set name(newName) {
this._name = newName;
}
get name() {
return this._name;
}
}