有没有更好的方法向javascript对象添加常量函数?
现在,我正在做这样的事情:有没有更好的方法向javascript对象添加常量函数?,javascript,constants,javascript-objects,Javascript,Constants,Javascript Objects,现在,我正在做这样的事情: var myObject = {} const action = () => { console.log("say hello") } myObject.act = action 这将导致输出: say hello 但是有没有一种更快的方法可以做到这一点,比如常数λ或者别的什么 很像: // This is psuedocode. myObject.myConstAction = const lambda (){ console.log(
var myObject = {}
const action = () => {
console.log("say hello")
}
myObject.act = action
这将导致输出:
say hello
但是有没有一种更快的方法可以做到这一点,比如常数λ或者别的什么
很像:
// This is psuedocode.
myObject.myConstAction = const lambda (){
console.log("I won't change.")
}
我希望属性.myConstation不能被重新分配或覆盖。事实上没有任何常量函数或常量之类的东西是对象的属性。最快的方法仍然是 myObject.act=>console.log'say hello' 查看常量标识符如何不起任何作用: 常量myObject={} 常量操作==>{ 你好 } myObject.act=动作; myObject.act=>console.log“再见”;
myObject.act 实际上,没有任何东西是常量函数或常量,任何东西都是对象的属性。最快的方法仍然是 myObject.act=>console.log'say hello' 查看常量标识符如何不起任何作用: 常量myObject={} 常量操作==>{ 你好 } myObject.act=动作; myObject.act=>console.log“再见”;
myObject.act 你搞错了你的代码 动作是一个常量,其值不能更改 myObject.act被分配了动作值的副本,即对同一函数的另一个引用。关于myObject.act,没有什么是不变的 您可以指定一个函数来执行操作,并使属性为只读,如下所示: var myObject={} Object.definePropertyObject,act{ 值:操作==>{ console.logsayhello; }, 可写:false }; myObject.act; //下一行无效,因为该属性不可写 myObject.act=>console.logoverwrited!;
myObject.act 你搞错了你的代码 动作是一个常量,其值不能更改 myObject.act被分配了动作值的副本,即对同一函数的另一个引用。关于myObject.act,没有什么是不变的 您可以指定一个函数来执行操作,并使属性为只读,如下所示: var myObject={} Object.definePropertyObject,act{ 值:操作==>{ console.logsayhello; }, 可写:false }; myObject.act; //下一行无效,因为该属性不可写 myObject.act=>console.logoverwrited!;
myObject.act;所以常量对象可以有可变的属性?重新分配和变异是完全不同的概念。const表示永远不能重新分配=左侧的变量名,仅此而已。@nonreature0714使对象本身的属性(而不是嵌套属性)不可变,应用于它。@Xufox感谢您提供关于对象的非常有用的链接。我认为这个答案有效地证明了常量的限制。所以常量对象可以具有可变属性?重新分配和变异是完全不同的概念。const表示永远不能重新分配=左侧的变量名,仅此而已。@nonreature0714使对象本身的属性(而不是嵌套属性)不可变,应用于它。@Xufox感谢您提供关于Object.Freeze的非常有用的链接。我认为这个答案有效地演示了常量的限制。要生成常量函数属性,您必须使用Object.DefinePropertyObject,act,{writable:false,enumerable:true,configurable:false,value:=>console.logsay hello};。常量在这里没有帮助。要生成常量函数属性,必须使用Object.DefinePropertyObject,act,{writable:false,enumerable:true,configurable:false,value:=>console.logsay hello};。const在这里没有帮助。另外,添加configurable:false以禁止用另一个对象覆盖myObject.act.defineProperty。@Quentin这正是我要找的。但是你能在你的答案中加上:false或者解释为什么你不需要它或者不想要它吗?谢谢另外,添加configurable:false以禁止用另一个Object.defineProperty覆盖myObject.act。@Quentin这正是我要找的。但是你能在你的答案中加上:false或者解释为什么你不需要它或者不想要它吗?谢谢