如何从Node.js中的远程lib扩展`Array.prototype`?

时间:2014-03-31 21:30:30

标签: javascript node.js npm

我使用纯JavaScript在hackerrank玩,没有额外的数组或数学库,与python不同,而且非常强大。何时使用sugar.jsunderscore

我在这里找到了这个解决方案,但是如何使用此Array.prototype数据扩展res?这sugar.min.js中的res位于何处?因为它只包含元数据。

require('http').get({
    host: 'cdnjs.cloudflare.com',
    path: '/ajax/libs/sugar/1.4.1/sugar.min.js'
  }, function(res) {
    // how to extend for example Array
    Array.prototype = res;
    var gs = ['big', 'pig', 'digg'].count(/g$/);
    console.log(gs);
});

1 个答案:

答案 0 :(得分:2)

您可以像这样向原型添加方法:

Array.prototype.count = function () {
  return this.length; //or whatever
}

但看起来您正在尝试使用来自AJAX请求的数据来修改原型。这看起来有点......很奇怪,但如果你通过网络获得函数实现的字符串表示,你就可以做到这一点:

如果我们假设' res'返回此(我不知道是否有):

{
    count: "return this.length;"
}

你可以这样做:

require('http').get({
    host: 'cdnjs.cloudflare.com',
    path: '/ajax/libs/sugar/1.4.1/sugar.min.js'
}, function(res) {
    var methods = JSON.parse(res);    
    Array.prototype.count = new Function(methods.counts);
    var gs = ['big', 'pig', 'digg'].count(/g$/);
    console.log(gs);
});

我没有尝试过,但理论上应该这样做。虽然这是一个非常奇怪的想法(用网络请求的结果修改你的环境和内置插件),所以这可能不是你的意思。