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

面试题,求解答

面试题,求解答

aluckdog 2018-08-03 08:14:47
定义一个列表类 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();

}


查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 851 浏览
慕课专栏
更多

添加回答

举报

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