定义一个列表类 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方法的实现。
2 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
可以使用 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
提交
取消