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>