javascript - 使用对象符号向对象添加方法

标签 javascript prototype meteor javascript-objects

我有以下代码:

Template.leaderboard.players = function() {
    return Players.find({}, {sort: {score: -1, name: 1}});
};

Template.leaderboard.selected_name = function() {
    var player = Players.findOne(Session.get("selected_player"));
    return player && player.name;
};

我想这样组织得更清楚:

Template.leaderboard = {
    players: function() {
        return Players.find({}, {sort: {score: -1, name: 1}});
    },
    selected_name: function() {
        var player = Players.findOne(Session.get("selected_player"));
        return player && player.name;
    }
};

问题是(我相信控制台中的错误)这会覆盖 Template.leaderboard 对象的所有现有方法并替换它。

是否有可能将这些方法添加到对象中,同时使用上面显示的那种表示法保留现有方法?

最佳答案

您可以像在第一个示例中那样一次添加一个,也可以使用一种方法将一个对象与另一个对象合并,例如 jQuery 的 .extend:

$.extend(Template.leaderboard, {
    newMethod1: function() {
        ...
    },
    newMethod2: function() {
        ...
    }
});

使用后一种方法,您还需要首先确保 Template.leaderboard 确实存在!

var Template = Template || {};
Template.leaderboard = Template.leaderboard || {};

如果 Template 实际上是跨多个 JS 文件定义的,那么像上面这样的代码将是典型的,并且允许您继续添加方法而不考虑文件实际加载的顺序。

关于javascript - 使用对象符号向对象添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667276/

相关文章:

javascript - 在 Ember 中创建一个输入类型 ="date"

javascript - 空 JavaScript 函数的骨架

Javascript:添加的功能不会出现在父对象上

使用 Meteor-CollectionFS 上传 Meteor 文件时找不到错误方法

javascript - prototype.js - IE8 - 刷新后递归函数不起作用

javascript - 无法弄清楚如何使用 AJAX 从 JSON 数据对象获取特定值

javascript - 自定义 Google Map API V3 PEGMAN 按钮

c - 多个相同的原型(prototype)是否合法?

javascript - 如何使用 Meteor.http.call

快速渲染路径上的 meteor 错误 TypeError : dynamics. slice is not a function