面试题,求解答

定义一个列表类 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方法的实现。


慕村9548890
浏览 518回答 3
3回答

慕码人2483693

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

千巷猫影

可以使用 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();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript