Javascript objects 使用函数操作创建对象数组

Javascript objects 使用函数操作创建对象数组,javascript-objects,Javascript Objects,是否可以创建一个执行功能的对象数组? 例如,像这样: <script> console.clear(); const acts = [ { 'inc' : (x) => x+1 }, { 'dec' : (x) => x-1 } ]; console.log(acts.inc(10)); console.log(acts.dec(15)); </script> console.clear(); 常数行为=[ {'inc':(x)=>x+1}

是否可以创建一个执行功能的对象数组? 例如,像这样:

<script>
console.clear();

const acts = [
  { 'inc' : (x) => x+1 },
  { 'dec' : (x) => x-1 } 
];

console.log(acts.inc(10));
console.log(acts.dec(15));

</script>

console.clear();
常数行为=[
{'inc':(x)=>x+1},
{'dec':(x)=>x-1}
];
控制台日志(acts.inc(10));
控制台日志(acts.dec(15));

上面给出了一个错误--TypeError:acts.inc不是一个函数。

您可以向阵列原型添加一个函数


Array.prototype.inc=

你就快到了!创建具有“函数属性”的对象,而不是对象数组:

acts = {
  'inc' : (x) => x+1,
  'dec' : (x) => x-1
};
那么

将返回:

4
在原始代码中,您必须使用:

acts[0].inc(3)

因为它是一个数组…

对于任何感兴趣的人来说,下面是我如何使用所选择的解决方案,以及创建的每个函数的示例输出(带有一些选项)


对象函数数组
正文{字号:1.2米;行高:1.6;}
console.clear();
//以下仅用于屏幕显示测试目的
var-former=console.log;//保留console.log以前的操作
var demo=document.getElementById('demo');
console.log=函数(…msg){
前者(…msg);//通过控制台维护现有日志记录。(可选)
demo.append(msg.join(“”)+'\n');//需要指定输出
} 
//显示测试结束(也显示在console.log显示上)
常数行为={
“inc”:(x)=>x+1,
“dec”:(x)=>x-1,
‘mul’:(x,y)=>x*y,
'div':(x,y)=>x/y,//小心y=0(此处无检查)
‘pwr’:(x,y)=>x**y,//x为y的幂
'deg':(rad)=>(rad*Math.PI/360),//弧度的度数
“rad':(deg)=>(deg/Math.PI*360),//度的弧度
“pct”:(金额)=>金额*100,//形式百分比
'bit':(siz)=>(acts.pwr(2,siz)-1.toString(2),//形成位掩码
'oct':(dec)=>dec.toString(8),//形式八进制
‘hex’:(dec)=>dec.toString(16),//形成十六进制
“fmt”:(amt,size)=>amt.toFixed(size),//number.toFixed(#)字符串
“cdt”:(dateInfo,locn='en-US')=>dateInfo.toLocaleDateString(locn),//格式化US日期对象
};
console.log(acts.inc(10));//11
console.log(acts.dec(15));//14
console.log(acts.mul(4,5));//20
console.log(acts.div(5,4));//1.25
控制台日志(acts.pwr(2,16));//65536
控制台日志(动作度(360));//3.14159...
console.log(acts.rad(Math.PI/2));//1.57079...
console.log(`${acts.pct(0.15)}%`);//15%
console.log(`${acts.pct(acts.div(7,8))}%`;//87.5%
console.log('0b'+acts.bit(8));//0b11111111
console.log('10.0=0o'+acts.oct(10),'octal');//0o12
console.log('0x'+acts.hex(65535));//0xffff
console.log(acts.fmt(Math.PI,2));//3.14
console.log(acts.fmt(Math.PI,4));//3.1416
console.log(Math.PI);//全精度PI
console.log('m/d/yyyy:',acts.cdt(new Date());//当前日期(m/d/年格式)美国
console.log('dd/mm/yyyy:',acts.cdt(新日期(),'en-GB');//日期(日/月/年格式)GB
//二进制范围显示的测试
log('\n','-+'.重复(6)+'-');
console.log('0b'+acts.bit(0));//0b0
console.log('0b'+acts.bit(0).padStart(8,'0'));//0b00000000
console.log('0b'+acts.bit(16));//0b1111…1111(长度=16位)
console.log('0b'+acts.bit(16).padStart(32,'0'));//0b0111…1111
console.log('0b0'+acts.bit(31));//0b11111…11111(长度=31位)
console.log('0b'+acts.bit(32).padStart(32,'0'));//0b1111…1111(=32位)
log('\n','-+'.重复(6)+'-');
console.log(`父亲的生日:${acts.cdt(新日期(1925,1,1))}`);//默认美国格式

欢迎发表补充意见。

可以,但不能完全回答我提出的问题。将用作最后手段。我试图更好地理解对象操作。
acts[0].inc(3)
    <!DOCTYPE html><html lang="en"><head>
<title> Array of Object Functions </title>
<meta charset="UTF-8">
<meta name="viewport" content="width-device-width,initial-scale=1.0, user-scalable=yes"/>
<!-- From: https://stackoverflow.com/questions/62824415/create-array-of-objects-with-function-actions -->
<style>
 body { font-size: 1.2em; line-height: 1.6; }
</style>
</head><body>
<pre id='demo'></pre>

<script>
console.clear();
// following used only for screen display testing purposes
var former = console.log;  // retain former actions of console.log
var demo=document.getElementById('demo');
console.log = function(...msg){
  former(...msg);  // maintains existing logging via the console. (optional)
  demo.append(msg.join(' ')+'\n');  // output needs to be specified
} 
// end of display testing (also shows on console.log display)


const acts = {
  'inc' : (x) => x+1,
  'dec' : (x) => x-1,
  'mul' : (x,y) => x*y,
  'div' : (x,y) => x/y,                      // careful with y=0 (no checks here)
  'pwr' : (x,y) => x**y,                     // x to power of y

  'deg' : (rad) => (rad * Math.PI / 360),    // degrees from radians
  'rad' : (deg) => (deg / Math.PI * 360),    // radians from degrees
  'pct' : (amt) => amt * 100,                // form percentage

  'bit' : (siz) => (acts.pwr(2,siz)-1).toString(2),    // form bit-mask
  'oct' : (dec) => dec.toString(8),                    // form octal
  'hex' : (dec) => dec.toString(16),                   // form hexidecimal

  'fmt' : (amt,size) => amt.toFixed(size),             // number .toFixed(#) string
  'cdt' : (dateInfo,locn='en-US') => dateInfo.toLocaleDateString(locn),   // format US Date object
};

console.log(acts.inc(10));                  // 11
console.log(acts.dec(15));                  // 14
console.log(acts.mul(4,5));                 // 20
console.log(acts.div(5,4));                 // 1.25
console.log(acts.pwr(2,16));                // 65536

console.log(acts.deg(360));                 // 3.14159...
console.log(acts.rad(Math.PI/2));           // 1.57079...
console.log(`${acts.pct(0.15)}%`);          // 15%
console.log(`${acts.pct(acts.div(7,8))}%`); // 87.5%

console.log('0b'+acts.bit(8));              // 0b11111111
console.log('10.0 = 0o'+acts.oct(10),'octal');   // 0o12
console.log('0x'+acts.hex(65535));          // 0xffff

console.log(acts.fmt(Math.PI,2));           // 3.14
console.log(acts.fmt(Math.PI,4));           // 3.1416
console.log(Math.PI);                       // full precision PI

console.log('m/d/yyyy   : ',acts.cdt(new Date()));            // current date (m/d/year format)  US
console.log('dd/mm/yyyy : ',acts.cdt(new Date(),'en-GB'));  // date (dd/mm/year format)  GB


// tests of binary range displays
console.log('\n ','----+'.repeat(6)+'--');
console.log('0b'+acts.bit(0));      // 0b0
console.log('0b'+acts.bit(0).padStart(8,'0'));     // 0b00000000
console.log('0b'+acts.bit(16));             // 0b1111...1111    (length = 16 bits)
console.log('0b'+acts.bit(16).padStart(32,'0'));   // 0b0111...1111
console.log('0b0'+acts.bit(31));             // 0b11111...11111  (length = 31 bits)
console.log('0b'+acts.bit(32).padStart(32,'0'));   // 0b1111...1111   ( = 32 bits)
console.log('\n ','----+'.repeat(6)+'--');
console.log(`Dad's birthday: ${acts.cdt(new Date(1925,1,1))}`);  // default US format
</script>

</body>
</html>