Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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 “this”关键字如何以特定方式工作?_Javascript_Function_Methods_Constructor_Overwrite - Fatal编程技术网

Javascript “this”关键字如何以特定方式工作?

Javascript “this”关键字如何以特定方式工作?,javascript,function,methods,constructor,overwrite,Javascript,Function,Methods,Constructor,Overwrite,我正试图学习JavaScript,但由于误解了这个关键字,我遇到了一个更大的问题,无法继续前进 我看了很多关于它的内容,几乎不理解它,但仍然有一些麻烦 我有一些代码: function Person (name, age) { this.name = name; this.age = age; this.changeName = function (name) { this.name = name; } } 我们用这个干什么? 据我所知,我们使用它在函数构造函数中创建变

我正试图学习JavaScript,但由于误解了这个关键字,我遇到了一个更大的问题,无法继续前进

我看了很多关于它的内容,几乎不理解它,但仍然有一些麻烦

我有一些代码:

function Person (name, age) {
  this.name = name;
  this.age = age;
  this.changeName = function (name) {
    this.name = name;
  }
}
我们用这个干什么? 据我所知,我们使用它在函数构造函数中创建变量,并给它我们可以引用的name参数的值。我说得对吗

那么我有这个代码:

var p1 = new Person ("John", 30);
p1.changeName ("Jane");
console.log(p1.name);
正如我在这里整理的那样,我们调用的方法覆盖了我们创建的要引用的变量。但它不会改变实际参数。那么如果它是对的,我们为什么要用它呢?更改实际名称参数是否重要

整个代码来自教学应用程序

那么如果它是对的,我们为什么要用它呢?更改实际名称参数是否重要

不,在这个例子中没有必要这样做。changeName更改由新人创建的对象的属性

这个示例代码确实有点奇怪,因为它在构造函数中创建了changeName函数,但没有做通常在构造函数中创建函数时所做的事情。我希望代码是这样的,这会将changeName放在原型上:

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.changeName = function(name) {
  this.name = name;
};
或同等级别或以下级别:

function Person(name, age) {
  this.getName = function() {
    return name;
  };
  this.changeName = function(newName) {
    name = newName;
  };
  this.getAge = function() {
    return age;
  };
}

该代码确实更新了对代码调用人没有任何影响的参数。它根本不创建名称和年龄属性;相反,它只是通过getName和getAge访问它们的值。还有一个函数可以更改名称changeName;但是没有改变年龄的功能。人们编写这样的代码,以便年龄不能从Person构造函数中创建的外部代码中更改。

我想您可能误解了实际更改的参数,所以我将其改写为这样,这很有帮助

函数人参数\u名称、参数\u年龄{ this.name=参数名称; this.age=argument\u age; this.changeName=函数参数\u change\u name{ this.name=参数\更改\名称; } } 让p1=新人约翰,30岁; p1.改名简; console.logp1 this关键字用于创建类中的变量并为其赋值。它再次用于创建函数,可以是getter,也可以是setter。因此,在您的代码中,this.changeName是一个函数,当传递一个值时,它将更改人员的姓名。 例如

变量a=5;//a是一个整数 var b=汉族//b是一个字符串 var c=函数名{ //代码在这里
}//那么c也是一个函数;但它不会改变实际参数,这是什么意思。?没错,不是这样,但突出显示…似乎是件奇怪的事情?试试this.changeName=函数名{this.name=name;}.bindthis或this.changeName=name=>{this.name=name;}或const self=this;this.changeName=函数名{self.name=name;}.@connexo为什么?这个/这个名字改成了简。此内部changeName将引用类的实例。重复的@connexo-Constructor函数是JavaScript类。class关键字只是用于创建它们的新语法和可选语法。