Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在forEach()中创建方法;_Javascript_Methods_Foreach - Fatal编程技术网

Javascript 在forEach()中创建方法;

Javascript 在forEach()中创建方法;,javascript,methods,foreach,Javascript,Methods,Foreach,我正在尝试为变量res创建方法。预期结果将是res.add.wood('100')。这将使木材数量增加100res.get.wheat()将获取小麦的数量 资源是['wood','smeat','gold','meat'],操作是['get','set','add','sub']。我不打算将所有这些定义如下: var resources = ['wood', 'wheat', 'gold', 'meat']; var actions = ['get', 'set', 'add', 'sub'];

我正在尝试为变量res创建方法。预期结果将是res.add.wood('100')。这将使木材数量增加100
res.get.wheat()
将获取小麦的数量

资源是['wood','smeat','gold','meat'],操作是['get','set','add','sub']。我不打算将所有这些定义如下:

var resources = ['wood', 'wheat', 'gold', 'meat'];
var actions = ['get', 'set', 'add', 'sub'];

var res;

function res.get.wood() {
  //
}

function res.set.wood() {
  //
}

// 6 more to define.....
我正在寻找一种使它更快的方法

以下代码使我能够使用
res.get()
res.set()
res.add()
res.sub()

我需要另一个循环,我尝试了以下方法,但无效:

res.forEach(function(arrayElement) {

  ['get', 'set', 'add', 'sub'].forEach(function(arrayInnerElement) {

    res[arrayElement][arrayInnerElement] = function() {
      alert(arrayInnerElement);
    }

  });
});

我建议这样做:

var-resources={“木头”:50,“小麦”:100,“黄金”:0,“肉”:50};
var resourceManager=(函数(资源){
功能资源(金额){
this.amount=金额| | 0;
}
Resource.prototype.get=函数(){
退还此金额;
};
Resource.prototype.set=函数(金额){
这个。金额=金额;
};
Resource.prototype.add=函数(金额){
此项。金额+=金额;
};
Resource.prototype.sub=函数(金额){
本金额-=金额;
};
var o={};
Object.keys(资源).forEach(函数(资源){
o[resource]=新资源(resources[resource]);
});
返回o;
}(资源);
var-res=资源管理器;
console.log(res.wood.get());//50
木制品套装(10);
console.log(res.wood.get());//10
res.wood.添加(5);
res.wood.sub(2);

console.log(res.wood.get());//13
只需将原型对象设置为新对象并在其中定义即可

function Item () {
    this.get = function () {alert("got me");}
    this.set = function () {}
    this.add = function () {}
    this.sub = function () {}
  }


  function Wood () {

  }

  Wood.prototype = new Item ();
那么你所要做的就是:

 var newWoodItem = new Wood();
如果需要重写其中一个方法

 function Wood () {
    this.get = function () {alert("i am the new method.");}
 }

如果您有一个正在退出的函数来处理所有操作(例如执行API调用),并且只需要一个更好的接口,那么您可以使用ES5创建
res
对象:

功能资源\行动(资源、行动、金额){
console.log(资源、操作、金额);
};
var资源=[‘木材’、‘小麦’、‘黄金’、‘肉类’];
var actions=['get','set','add','sub'];
var res=resources.reduce(函数(res,r){
res[r]=actions.reduce(函数(act,a){
行为[a]=功能(金额){
返回资源动作(r、a、金额);
};
回归法;
}, {})
返回res;
}, {});
金决议,添加(10)我会用“jQuery风格”来实现,它的功能类似于
$(el).css('color','red')
,如下所示:

//创建一个股票对象
var res=新股票();
//玩它
控制台.log(res.get('wood');//0
console.log(res.set('wood',10));//10
console.log(res.get('wood'));//10
console.log(res.add('wood',5));//15
console.log(res.sub('foo',5));//false(未定义的资源)
功能股票(){
var资源类型=[‘木材’、‘小麦’、‘黄金’、‘肉类’],
资源={};
init();
函数init(){

对于(var i=0;API在我看来很奇怪。实现
res.add('wood',10)
res.get('gold')
)等会简单得多。为什么不为抽象资源创建类,在res中创建相应的属性,并改用res.wood.add(100),res.wood.get()呢?还有,
res.set.wood(){
是JavaScript中的语法错误。为什么会这样?如果
.set
wood
是方法,为什么会出错?@ivan调用函数时,
{}
不使用。声明函数时,您需要使用
函数
关键字。我认为如果
是一个对象文字会更好。因此,基本上您正在创建所有必要的方法并运行一个大函数来处理参数,对吗?是的。假设您将操作作为API调用分派给服务器,而不是在客户端上实际添加或删除,因此您不需要单独的操作实现。如果我想设置此值。创建对象时,每个资源的数量,我应该将其放在代码中的什么位置?构造函数?我更新了答案。您现在必须传递
资源
对象(资源-数量对)到
resourceManager
iLife设置初始值。
 function Wood () {
    this.get = function () {alert("i am the new method.");}
 }