Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 从对象(日期对象)解构函数_Javascript_Date_Methods_This_Destructuring - Fatal编程技术网

Javascript 从对象(日期对象)解构函数

Javascript 从对象(日期对象)解构函数,javascript,date,methods,this,destructuring,Javascript,Date,Methods,This,Destructuring,如果我想破坏一个对象,我会: 常量对象={ a:‘a’, fn:=>“某些功能” } //常数fn=obj.fn; //或 常数{ A. fn }=obj; console.log fn 因为它不是日期对象。当您在没有适当上下文(即date.getDate)的情况下调用getDate时,您是在窗口上下文中调用它,或者在严格模式下调用null。window和null都不是日期对象,因此函数失败 Try const getDate=date.getDate.binddate 演示: const

如果我想破坏一个对象,我会:

常量对象={ a:‘a’, fn:=>“某些功能” } //常数fn=obj.fn; //或 常数{ A. fn }=obj; console.log fn 因为它不是日期对象。当您在没有适当上下文(即date.getDate)的情况下调用getDate时,您是在窗口上下文中调用它,或者在严格模式下调用null。window和null都不是日期对象,因此函数失败

Try const getDate=date.getDate.binddate

演示:

const test={fn:function{返回this.constructor;}}; const normal=test.fn; console.lognormal;//对象 常数{fn}=测试; console.log fn;//窗 常量绑定=test.fn.bindtest; console.log绑定;//对象,因为它不是日期对象。当您在没有适当上下文(即date.getDate)的情况下调用getDate时,您是在窗口上下文中调用它,或者在严格模式下调用null。window和null都不是日期对象,因此函数失败

Try const getDate=date.getDate.binddate

演示:

const test={fn:function{返回this.constructor;}}; const normal=test.fn; console.lognormal;//对象 常数{fn}=测试; console.log fn;//窗 常量绑定=test.fn.bindtest;
console.log绑定;//对象这可能不值得,但您可以编写一个函数来帮助您从对象中解构方法。在这里,bindMethods使用helper allKeys来实现这一点,它从对象的整个原型链收集关键点,而原型链又依赖于walkPrototypeChain。如果需要,它们显然可以折叠成一个单一的函数

const walkPrototypeChain=process,init,finish=>obj=>{ 设currObj=obj,currRes=init; 做{ currRes=processcurrRes,currObj }而currObj=Object.getPrototypeOfcurrObj 返回完成电流 } const allKeys=walkPrototypeChain set,obj=>{Object.getOwnPropertyNamesobj.forEachk=>set.addk;return set}, =>新设置, s=>[…s] const bindMethods=obj=>allKeysobj.reduce o、 n=>obj的类型[n]==‘功能’?{…o[n]:obj[n].bindobj}:o, {} const date=新日期 const{getDate,getFullYear}=bindMethodsdate//或任何其他日期函数 console.loggetDate
loggetFullYear这可能不值得,但您可以编写一个函数来帮助您从对象中解构方法。在这里,bindMethods使用helper allKeys来实现这一点,它从对象的整个原型链收集关键点,而原型链又依赖于walkPrototypeChain。如果需要,它们显然可以折叠成一个单一的函数

const walkPrototypeChain=process,init,finish=>obj=>{ 设currObj=obj,currRes=init; 做{ currRes=processcurrRes,currObj }而currObj=Object.getPrototypeOfcurrObj 返回完成电流 } const allKeys=walkPrototypeChain set,obj=>{Object.getOwnPropertyNamesobj.forEachk=>set.addk;return set}, =>新设置, s=>[…s] const bindMethods=obj=>allKeysobj.reduce o、 n=>obj的类型[n]==‘功能’?{…o[n]:obj[n].bindobj}:o, {} const date=新日期 const{getDate,getFullYear}=bindMethodsdate//或任何其他日期函数 console.loggetDate
安慰loggetFullYear@ABOS所以这个问题与析构函数没有任何关系,它是关于析构函数的问题。标题是析构函数,所以我认为OP想这样做。@ABOS:这是这个答案的要点。这里的解构为您提供了一个裸函数引用,而不是绑定方法。如果你能找到一种用析构函数实现的方法,我们洗耳恭听。@ScottSauyet,我想困难在于如何用析构函数写一个“一行”,如果用简单的赋值,比如f=date.getDate,f,我很高兴以前已经讨论过很多了…@ABOS:我不明白。f=date.getDate,f的问题与问题中描述的问题完全相同。@ABOS所以。。。?这个问题与析构函数没有任何关系,它是关于析构函数的问题。标题是析构函数,所以我认为OP想这样做。@ABOS:这是这个答案的要点。这里的解构为您提供了一个裸函数引用,而不是绑定方法。如果你能找到一种用析构函数实现的方法,我们洗耳恭听。@ScottSauyet,我想困难在于如何用析构函数写一个“一行”,如果用简单的赋值,比如f=date.getDate,f,我很高兴以前已经讨论过很多了…@ABOS:我不明白。f=date.getDate,f与问题中描述的问题完全相同。Destructuring只是name=obj.name的简写,在这两种情况下,您都失去了obj的上下文。因此,这并不局限于日期,任何obj都会失去这一点。这两个日期示例并不等同。您的解构如下:const getDate=date.getDate;getDate如果没有date对象,它就没有什么意义:让t成为LocalTime?ThisTime值此值。。Wh
这是调用解构的getDate的时候吗?您可以使用getDate.calldate来修复它-@RobG你评论中的问题有助于理解发生了什么,现在很有意义,当我解构一个函数时,我失去了这个,谢谢:解构只是name=obj.name的简写,在这两种情况下,你都失去了obj的上下文。因此,这并不局限于日期,任何obj都会失去这一点。这两个日期示例并不等同。您的解构如下:const getDate=date.getDate;getDate如果没有date对象,它就没有什么意义:让t成为LocalTime?ThisTime值此值。。当调用解构的getDate时,这是什么?您可以使用getDate.calldate来修复它-@RobG你评论中的问题有助于理解发生了什么,现在很有意义,当我解构一个函数时,我失去了这个,谢谢: