为了账号安全,请及时绑定邮箱和手机立即绑定

面试题,求解答

面试题,求解答

慕村9548890 2019-03-14 18:15:09
定义一个列表类 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 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

List.length = this.all().length ???


查看完整回答
反对 回复 2019-03-20
?
千巷猫影

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();

}


查看完整回答
反对 回复 2019-03-20
  • 3 回答
  • 0 关注
  • 517 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信