2015-06-14 65 views
3

我有一个编程练习来创建两个数组原型,它们都是函数。我已经把我的代码放在下面。如最后一行所示,另一个将被调用。我想获得第二个函数来修改通过简单地调用第一个函数返回的值。这是对于下面的代码,我希望输出是[4,6,4000],我反过来得到推后数组的长度,即在这种情况下,3。如何从Array的原型函数返回数组对象?

Array.prototype.toTwenty = function() 
{ 
    return [4,6]; 
}; 
Array.prototype.search = function (lb) 
{ 

    if(lb >2) 
    { 
     //This doesn't work 
     return this.push(4000); 
    } 
}; 

var man = []; 
console.log(man.toTwenty().search(6)); 

//console.log returns 3, I need it to return [4,6,4000] 

我的搜索导致我arguments.callee.caller,但没有尝试做为所被取消,我无法使用它。

请问有人可以帮我吗?我试图读取原型继承,链接和级联,但似乎无法提取答案。感谢您的帮助

+0

*“我有一个编程练习创建两个数组原型“*您的任务是将函数添加到'Array.prototype',而不是创建两个p Array的旋转型(这是不可能的)。 –

+0

1.没有理由''toTwenty'应该放在'Array.prototype'上,因为它不使用数组,它只是返回一个新数组。它应该在'Array'上。 2.如果要添加到'Array.prototype',最好使用'Object.defineProperty'并使添加不可枚举。为什么在[这个答案]中间接覆盖(http://stackoverflow.com/questions/9329446/for-each-over-an-array-in-javascript/9329476#9329476)。 –

回答

6

Array.prototype.push引用MDN,

push()方法将一个或多个元素的阵列的端部和返回该数组的新长度。

所以,实际上this.push(4000)推动价值,但你正在返回的push的结果,你得到这3数组的当前长度。


相反,你应该返回数组对象本身,这样

Array.prototype.toTwenty = function() { 
    return [4, 6]; 
}; 

Array.prototype.search = function (lb) { 
    if (lb > 2) { 
     this.push(4000);   // Don't return here 
    } 
    return this;     // Return the array object itself. 
}; 

console.log([].toTwenty().search(6)); 
// [ 4, 6, 4000 ] 
0

这是我会怎么做,

<script> 
    Array.prototype.toTwenty = function() { 
     return [4, 6]; 
    }; 
    Array.prototype.search = function(lb) { 

     if (lb > 2) { 

      return this.push(4000); 
     } 
    }; 

    var man = []; 
    man = man.toTwenty(); 
    man.search(8); 
    console.log(man); 
</script> 

Here is a demo

+0

我的代码正在通过测试驱动开发进行评估(我刚刚在三天前解释了这个术语!)。我必须创建将在toTwenty()。search()格式中调用的代码,但不幸的是我无法改变它。 –