首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带本机对象的JS原型(这)“点”函数

不带本机对象的JS原型(这)“点”函数
EN

Stack Overflow用户
提问于 2016-08-11 11:33:51
回答 3查看 130关注 0票数 0

我想知道如何使第二个脚本返回与第一个脚本相同的值(通过修改MyObject),因此我不必扩展本机对象。

基本上,我希望能够以parameter.functionName()而不是functionName(参数)的形式调用函数。

代码语言:javascript
复制
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 */
代码语言:javascript
复制
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 */

我在这里看过很多问题,但没有找到答案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-11 11:41:23

数组文字构造一个Array实例,您不可能影响它。因此,要使这与MyObject一起工作,您将需要更改调用它的代码。

一个简单的解决方案是包装器:

代码语言:javascript
复制
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;
};

代码语言:javascript
复制
console.log(new MyObject([1,2,3,4]).sum());

还有许多其他的很好的方法,但是没有人能改变[1,2,3,4].arraySum()不能工作的事实。

票数 1
EN

Stack Overflow用户

发布于 2016-08-11 11:44:55

代码语言:javascript
复制
console.log([1,2,3,4].arraySum())

[1,2,3,4]是一个数组,因此从Array.prototype继承,而不是从MyObject继承。因此,如果您真的想拥有parameter.functionName(),那么您必须向Array.prototype添加arraySum函数。

但是扩展本地原型并不是一个很好的实践。

这样您就可以编写自己的Array类:

代码语言:javascript
复制
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"
票数 1
EN

Stack Overflow用户

发布于 2016-08-11 12:18:25

https://jsfiddle.net/nuwanniroshana/2qoko562/

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38895223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档