我想知道如何使第二个脚本返回与第一个脚本相同的值(通过修改 MyObject),这样我就不必扩展 native 对象。
基本上,我希望能够将函数作为parameter.functionName()而不是functionName(parameter)来调用。
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 */
我在这里查看了很多问题,但没有找到答案。
最佳答案
数组文字构造一个 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()
不起作用的事实。
关于javascript - 没有原生对象的JS原型(prototype)(this) "dot"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38895223/