Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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_Function_Object_Vue.js_Ecmascript 6 - Fatal编程技术网

在Javascript对象上定义方法/函数

在Javascript对象上定义方法/函数,javascript,function,object,vue.js,ecmascript-6,Javascript,Function,Object,Vue.js,Ecmascript 6,这是: saveUpdate() { // Some code } 同: saveUpdate: function() { // Some code } 是否有一种最佳实践ES6方法来定义对象(特别是Vue.js组件)上的方法 更多背景: 我在Vue.js应用程序中遇到问题,这些方法在产品中正确触发。我定义的方法在开发中似乎工作得很好,但一旦编译用于生产,它们的行为似乎就不一样了。我在Vue.js文档中读到,所有方法都需要定义为新的独立函数,现在我想知道我定义方法的方式是否正确;

这是:

saveUpdate() {
   // Some code
}
同:

saveUpdate: function() {
   // Some code
}
是否有一种最佳实践ES6方法来定义对象(特别是Vue.js组件)上的方法

更多背景: 我在Vue.js应用程序中遇到问题,这些方法在产品中正确触发。我定义的方法在开发中似乎工作得很好,但一旦编译用于生产,它们的行为似乎就不一样了。我在Vue.js文档中读到,所有方法都需要定义为新的独立函数,现在我想知道我定义方法的方式是否正确;这其实是不对的

更广泛的例子:

...,
methods: {
  saveUpdate() {
   // Some code
  }
},
...
我应该做一些类似于:

...,
methods: {
  saveUpdate: () => {
   // Some code
  }
},
...
现代的最佳实践或公认的方法是什么?还是我找错了地方,我的声明就这么好?

是的,这是:

saveUpdate() {
   // Some code
}
语法糖用于:

saveUpdate: function() {
   // Some code
}
这两个条在语法上没有什么不同。如果您想要箭头函数,我相信您需要使用第二种形式:

saveUpdate: () => {
   // Some code in a lexical `this` scope (not useful in Vue computed).
}
还要注意->语法无效-它是一个胖箭头=>。尽管如评论中所指出的,您很可能不希望在Vue项目中使用箭头函数,因为您将失去与此的绑定,而这正是您与组件交互的方式。

是的,这:

saveUpdate() {
   // Some code
}
语法糖用于:

saveUpdate: function() {
   // Some code
}
这两个条在语法上没有什么不同。如果您想要箭头函数,我相信您需要使用第二种形式:

saveUpdate: () => {
   // Some code in a lexical `this` scope (not useful in Vue computed).
}
还要注意->语法无效-它是一个胖箭头=>。尽管如评论中所指出的,您很可能不希望在Vue项目中使用箭头函数,因为您将失去与该函数的绑定,而这正是您与组件交互的方式。

saveUpdate{…}是saveUpdate的ES6快捷方式:函数{…},因此是的,它们是相同的。由于Vue应用程序通常是传输的,因此没有理由不使用第一个选项

如果函数在应用程序中重用,则可以单独声明:

export function saveUpdate() {...}

...

export default {
  methods: { saveUpdate }
}
箭头不应用于希望像这样访问Vue实例的函数

正如所解释的那样:

调用所有生命周期挂钩时,其this上下文都指向 调用它的Vue实例

不要在选项属性或回调上使用箭头函数,例如 创建:=>console.logthis.a或vm.$watch'a',newValue=> 这是我的方法。因为箭头函数没有一个this,this 将被视为任何其他变量,并通过 父作用域,直到找到为止,通常会导致未捕获等错误 TypeError:无法读取未定义或未捕获的TypeError的属性: this.myMethod不是函数

saveUpdate{…}是saveUpdate的ES6快捷方式:函数{…},所以是的,它们是相同的。由于Vue应用程序通常是传输的,因此没有理由不使用第一个选项

如果函数在应用程序中重用,则可以单独声明:

export function saveUpdate() {...}

...

export default {
  methods: { saveUpdate }
}
箭头不应用于希望像这样访问Vue实例的函数

正如所解释的那样:

调用所有生命周期挂钩时,其this上下文都指向 调用它的Vue实例

不要在选项属性或回调上使用箭头函数,例如 创建:=>console.logthis.a或vm.$watch'a',newValue=> 这是我的方法。因为箭头函数没有一个this,this 将被视为任何其他变量,并通过 父作用域,直到找到为止,通常会导致未捕获等错误 TypeError:无法读取未定义或未捕获的TypeError的属性: this.myMethod不是函数


我应该这样做吗?我应该这样做吗?对于任何Vue实例函数computed/method/etc,都不太可能需要一个arrow函数,因为您将丢失对实例本身的重要引用。我看到@Phil不熟悉Vue-我要补充一点。不,new与构造函数一起使用。@lawrencerone不,它是一个速记函数-但具有相同的功能,因此它是纯可视的。如果没有逗号,则无效,因为对象属性总是用逗号分隔,数组元素也一样-总是存在。对于任何Vue实例函数computed/method/etc,都不太可能需要一个arrow函数,因为这样会丢失对实例本身的重要引用。我看到@Phil不熟悉Vue-我要补充一点。不,new与构造函数一起使用。@lawrencerone不,它是一个速记函数-但具有相同的功能,因此它是纯可视的。如果没有逗号,它是无效的,因为对象属性和数组元素总是用逗号分隔-它总是在那里。