Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.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 当编写代码遵循ECMAScript 6时,无法获取构造函数方法中定义的属性_Javascript - Fatal编程技术网

Javascript 当编写代码遵循ECMAScript 6时,无法获取构造函数方法中定义的属性

Javascript 当编写代码遵循ECMAScript 6时,无法获取构造函数方法中定义的属性,javascript,Javascript,我不熟悉Javascript和Node.js,我尝试按照ECMAScript 6编写代码,但我无法在构造函数方法中获得属性定义,但可以使用旧的编写样式引用它: 'use strict' function Animal (name) { this.name = name } // Animal.prototype.walk = (destination) => { // console.log(this.name + " walk to " + destination)

我不熟悉Javascript和Node.js,我尝试按照ECMAScript 6编写代码,但我无法在构造函数方法中获得属性定义,但可以使用旧的编写样式引用它:

'use strict'

function Animal (name) {
    this.name = name
}

// Animal.prototype.walk = (destination) => {
//     console.log(this.name + " walk to " + destination)  //undefined walk to China
// }

Animal.prototype.walk = function (destination) {
    console.log(this.name + " walk to " + destination)  //Cat walk to China
}

const cat = new Animal("Cat")
cat.walk('China')

I want to know the reason, thanks!
[…]我试图编写符合ECMAScript 6的代码,但我无法在构造函数方法中获得属性define,而它可以用旧的编写样式引用

请注意,问题不在于您的“构造函数”在这两种情况下都能正常工作:它将在实例上定义一个
name
属性

这是您在有注释和无注释的
walk()
方法中访问
name
的方式

箭头函数
()=>
不是
函数(){}
的快捷方式,它的诞生是为了避免将环境的引用
上下文定义到
函数中

通过上面的例子,我在ES5中对其进行了描述:

'use strict'

function Animal (name) {
  this.name = name
}


Animal.prototype.walk = (destination) => {
  console.log(this.name + " walk to " + destination)  //undefined walk to China
}

//the above ES6 will be transform to ES5 like this:
var self = this; //reference `this` - the environment context into variable `self`.
Animal.prototype.walk = function(destination) {
  console.log(self.name + " walk to " + destination);
}


const cat = new Animal("Cat")
cat.walk('China'); // undefined walk to China.
我希望按照上面的例子,您可以了解这到底是什么。因此,请使用
箭头功能
“响应”

[…]我试图编写符合ECMAScript 6的代码,但我无法在构造函数方法中获得属性define,而它可以用旧的编写样式引用

请注意,问题不在于您的“构造函数”在这两种情况下都能正常工作:它将在实例上定义一个
name
属性

这是您在有注释和无注释的
walk()
方法中访问
name
的方式

箭头函数
()=>
不是
函数(){}
的快捷方式,它的诞生是为了避免将环境的引用
上下文定义到
函数中

通过上面的例子,我在ES5中对其进行了描述:

'use strict'

function Animal (name) {
  this.name = name
}


Animal.prototype.walk = (destination) => {
  console.log(this.name + " walk to " + destination)  //undefined walk to China
}

//the above ES6 will be transform to ES5 like this:
var self = this; //reference `this` - the environment context into variable `self`.
Animal.prototype.walk = function(destination) {
  console.log(self.name + " walk to " + destination);
}


const cat = new Animal("Cat")
cat.walk('China'); // undefined walk to China.

我希望按照上面的例子,您可以了解这到底是什么。因此,请使用
箭头函数
“响应”。

非箭头函数不是“旧式”;他们是不同的风格,有不同的
规则。如果要将内容附加到原型,请继续使用函数表达式<代码>类
也存在于ES6中。非箭头函数不是“旧式”;他们是不同的风格,有不同的
规则。如果要将内容附加到原型,请继续使用函数表达式<代码>类
也存在于ES6中。我写了一篇关于范围和上下文的文章,希望能有所帮助:)谢谢@try catch finally更新我的答案:)我写了一篇关于范围和上下文的文章,希望能有所帮助:)谢谢@try catch finally更新我的答案:)