定义一个列表类 List,该类包含成员方法 add()、all() 和属性 length,要求构造函数和 add() 方法的参数为动态参数// 构造函数示例:var ls = new List('A', 'B', 'C');// add方法示例:ls.add('D', 'E');// length属性ls.length; // => 5// items属性ls.all(); // => ['A', 'B', 'C', 'D', 'E']这里主要的问题是length属性怎样实现,其它的方法都挺容易实现。求大神解答。已经实现的代码如下function List() { this.val = []; [].slice.call(arguments).map(item => { this.val.push(item); });}List.prototype.add = function() { [].slice.call(arguments).map(item => { this.val.push(item); });}List.prototype.all = function() { return this.val;}还差length方法的实现。
3 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
可以使用 defineProperty 绑定,还有可以复用 add 方法,all 方法返回副本不容易被误改。
function List() {
this.val = [];
Object.defineProperty(this, 'length', {
get: function() { return this.val.length }
});
this.add.apply(this, arguments);
}
List.prototype.add = function() {
this.val.push.apply(this.val, arguments);
}
List.prototype.all = function() {
return this.val.slice();
}
添加回答
举报
0/150
提交
取消