我想知道如何使第二个脚本返回与第一个脚本相同的值(通过修改MyObject),因此我不必扩展本机对象。
基本上,我希望能够以parameter.functionName()而不是functionName(参数)的形式调用函数。
Object.prototype.arraySum = function()
{
var sum = 0;
for(var i = 0; i < this.length; i++)
{
sum += this[i];
}
return sum;
}
console.log([1,2,3,4].arraySum()); /* return: 10 */function MyObject()
{}
MyObject.prototype.arraySum = function()
{
var sum = 0;
for(var i = 0; i < this.length; i++)
{
sum += this[i];
}
return sum;
}
console.log([1,2,3,4].arraySum()); /* return: [1,2,3,4].arraySum is not a function */我在这里看过很多问题,但没有找到答案。
发布于 2016-08-11 11:41:23
数组文字构造一个Array实例,您不可能影响它。因此,要使这与MyObject一起工作,您将需要更改调用它的代码。
一个简单的解决方案是包装器:
function MyObject(arr) {
this.array = arr;
}
MyObject.prototype.sum = function() {
var sum = 0;
for(var i = 0; i < this.array.length; i++) {
sum += this.array[i];
}
return sum;
};
console.log(new MyObject([1,2,3,4]).sum());还有许多其他的很好的方法,但是没有人能改变[1,2,3,4].arraySum()不能工作的事实。
发布于 2016-08-11 11:44:55
console.log([1,2,3,4].arraySum())[1,2,3,4]是一个数组,因此从Array.prototype继承,而不是从MyObject继承。因此,如果您真的想拥有parameter.functionName(),那么您必须向Array.prototype添加arraySum函数。
但是扩展本地原型并不是一个很好的实践。
这样您就可以编写自己的Array类:
function MyArray() {}
MyArray.prototype = new Array(); // all Array method will be available
MyArray.prototype.sum = function() {
console.log("My sum function")
}
var arr = new MyArray(); // it will produce an array-like object
arr.push(1,2,3);
arr.sum() // will log "My sum function"发布于 2016-08-11 12:18:25
https://jsfiddle.net/nuwanniroshana/2qoko562/
Array.prototype.sum = function() {
var sum = 0;
this.forEach(function(value) {
sum += value;
});
return sum;
};
var numbers = [1, 2, 3, 4, 5, 6, 7, 8];
var sum = numbers.sum();
console.log(sum);
var floats = [1.3, 85.2, 9.33, 1.24, 24.5, 6];
sum = floats.sum();
console.log(sum);https://stackoverflow.com/questions/38895223
复制相似问题