我正在尝试向每个对象都可以访问的对象数组添加一个函数,但不需要将它们分别添加到每个对象中.

让我举个简短的例子.

假设我有一个包含类似对象的数组,每个对象都有一个属性x和一个属性y:

var objects = [{x:1,y:2},{x:0,y:5},{x:3,y:14}
              ];

我想计算任何对象的x和y之和.

第一种方法:

为了计算给定对象的总和,可以将此对象传递给预定义函数,如下所示:

function xySum1(o) {return o.x + o.y;}

objects[0].x       //--> returns 1
objects[0].y       //--> returns 2
xySum1(objects[0]) //--> returns 3

这非常难看并且不令人满意,因为访问x和y属性的方式不同.此外,我的代码位于不同的位置,并且函数xySum1不易被识别为被创建以对数组中的对象进行操作.

第二种方法:

可以循环遍历数组并将函数作为属性添加到每个对象:

for (var i=0; i < objects.length; i++) {
    objects[i].xySum2 = function() {return this.x + this.y;};
}

现在,总和是通过

objects[0].x        //--> returns 1
objects[0].y        //--> returns 2
objects[0].xySum2() //--> returns 3

这要好得多.

问题

但是,这种方法存在问题.首先,当我向数组添加一个新元素时

objects.push({x:5,y:21});

然后在将函数添加到对象之前无法计算总和

objects[3].xySum2() //-->TypeError

另一个问题是我有很多对象,并且有许多功能要添加到它们中.将每个函数单独添加到每个对象似乎浪费了良好的内存空间.

有没有办法更有效地做到这一点?

解决方法

定义一个类:
function MyObject(x,y) {
    this.x = x;
    this.y = y;
}
MyObject.prototype = {
    xySum2: function() {
        return this.x + this.y;
    },x: 0,y: 0
};

然后你可以这样做:

var objects = [
    new MyObject(1,2),new MyObject(0,5),new MyObject(3,14)
];
objects[0].xySum2(); // 3

objects.push(new MyObject(5,21));
objects[3].xySum2(); // 26

另外,这也是Bergi在评论中可能想说的:

objects.xySum = function(index) {
    return this[index].x + this[index].y;
};

这种方法有点“肮脏”,但内存消耗也较少.

数组中所有对象之间的javascript函数共享的更多相关文章

  1. ios – NSArray indexOfObject返回nil

    任何想法为什么我不能得到一个我确定在数组中存在的对象的索引?相反,我没有……

  2. ios – 搜索数组swift中的对象

    我正在尝试使用UISearchController创建搜索功能.但是,我似乎无法使其与我的团队对象一起工作.我首先创建了一个包含id,name和shortname的TeamObject.然后我从一个url中检索teamData,并将TeamObjects添加到一个填充到tableView中的数组中.这个tableView包含一个searchController,它假设过滤数据,但没有任何反应.阵列

  3. ios – 通过objectID获取NSManagedObjects数组返回空数组

    TL;DR其持久性存储协调器不再在内存中的NSManagedobjectID会丢失其NSEntityDescription(实体),并且不会将等同于来自不同持久性存储协调器的NSManagedobjectID,即使它们的URIRepresentation相同也是如此.沿着兔子洞甜蜜……),因为这些objectID来自的PSC现在不再在内存中,并且NSManagedobjectID必须保持对必须由PSC持有的NSEntityDescription(实体)的一周引用.正如评论者所怀疑的那样,零实体似乎会引起问

  4. ios – iPhone MKMapView – MKPolygon问题

    我试图在iOS4.0中的MKMapView上绘制一个MKpolygon.我有一个NSArray,它包含包含纬度/经度属性的自定义对象.我有一个代码示例如下:我明白的是:>我需要创建MKpolygon>Ddd覆盖MapView>这将转动将触发MKpolygonView的创建.我的问题是如何使用NSArray(coordinateData)中包含的自定义对象,并将这些对象转换为CLLocationCo

  5. ios – 如何在Qualcomm的Vuforia示例应用程序中进行更改

    )有索引,在banana.h中不存在所以请注意这一点

  6. ios – 如何使用对象数组填充TableView?

    我有一个TableView控制器,我想用数组中的对象填充.我正在使用StoryBoard.另外,我不确定是否需要将标签放在故事板中的CellPrototype中作为一种占位符?本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  7. ios – 从核心数据实体获取属性值数组的有效方式是什么?

    考虑以下几点:这将返回一个Person对象数组.我想要的是这些对象的Person.name值数组.目前我走结果数组,提取名称并构建一个新的数组.有没有更清洁,更快的方式来做到这一点?

  8. ios – 在完成块中调用操作而没有内存泄漏

    我可以看到一种方式.这是创建一个只有数组作为属性的对象,并将此对象传递给Operation然后我将能够检索对象中的数组,但肯定它确实存在更好的方法.谢谢解决方法

  9. Swift Tutorial(swift 教程) 3:Arrays, Objects, and Classes数组,对象和类

    期间我们会学习到swift的一些新内容,比如数组,对象,类。GettingStarted打开xcode,点击Getstartedwithaplayground:name设置为Person,theplatform设置为iOS,点击Next.保存输出自动创建的语句:ClassesandObjects类和对象类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。接下来我们会创建一个名为Person.的类,并创建与这个类相关的方法和属性来服务于你的程序。首先在playground:中加

  10. Swift中的集合类数据结构

    在那种情况下,你将会需要一种基本的集合类数据结构。继续学习,你将会比较成熟的Cocoa数据结构与对应的纯Swift结构的性能。常见iOS数据结构iOS中三种最常用的数据结构是arrays,dictionaries和sets。除了在Swift和Objective-C中旧的Foundation框架中的数据结构,现在又有了新的仅支持Swift版本的数据结构与语言紧密结合在一起。Swift数组是同质的,意味着每一个Swift数组都只包含一种类型的对象。

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部