javascript - 没有原生对象的JS原型(prototype)(this) "dot"函数

标签 javascript

我想知道如何使第二个脚本返回与第一个脚本相同的值(通过修改 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/

相关文章:

javascript - 提交 Rails 表单是否可以避免离开当前 View ?

javascript - 防止 ipad/iphone safari 中的弹性滚动,但允许内容滚动

javascript - 在 Griddle 中使用自定义过滤器输入组件

javascript - 如何在 JavaScript 中获取 var 的一部分?

javascript - 网站的同一页面是否根据传递的变量显示不同的内容?

javascript - Node js,函数不等待响应

javascript - ng-options inside ng-repeat 删除已经选择的选项值

javascript - 使用js更改 Bootstrap 面板标题

javascript - 从 html 标签 <img> 获取数据并转到另一个页面

javascript - 使用 Google 地理 map 单击某个区域时,获取变量中的区域名称