如何为所有对象属性创建原型函数?

时间:2016-01-08 01:57:27

标签: javascript prototype

我有一个函数对象,我喜欢将另一个函数原型化为所有这些属性。

示例:

var test = function(num) {
  return num * num / (num/4);
}

var obj = {
  item1: item1, //this is a function already setted.
  item2: item2, //this is a function already setted.
  item3: item3 //this is a function already setted
}

我想要的是:obj.item1().test()而不在每个函数中设置this.test

1 个答案:

答案 0 :(得分:2)

您的test功能

return num * num / (num/4);
就我所见,

完全等同于num * 4

无论如何,评论中给出的示例itemX会返回一个数字。能够在数字上调用函数test的唯一方法是将其添加到Number原型中,有些人会说这是一个坏主意:

Object.defineProperty(Number.prototype, 'test', { value: function () {
    return this * this / (this/4);
});

如果您希望能够将test从调用结果链接到obj.itemX,那么后者需要返回this,而不是this.num

var itemX = function(val) {this.num = val; return this};

现在您只需要在test上放置obj修改后的版本一次:

var obj = {
  item1: item1, //this is a function already set.
  item2: item2, //this is a function already set.
  item3: item3, //this is a function already set.

  test: function() { return test(this.num); }
};

> obj.item1(22).test()
< 88
  

如何为所有对象属性创建原型函数?

如果您指的是test,那么这不是原型函数。它只是一个对象的简单旧方法。要添加它,只需将其添加到对象上,如上所述。