我正在尝试学习JavaScript,但是遇到了一个问题(更多是对“ this”关键字的误解),使我无法继续前进。
我看了很多关于它的内容,几乎看不懂,但是仍然有一些麻烦。
我有一些代码:
function Person (name, age) {
this.name = name;
this.age = age;
this.changeName = function (name) {
this.name = name;
}
}
我们在此使用“ this”做什么? 据我了解,我们使用“ this”在函数构造函数中创建变量,并为其提供我们可以引用的“ name”参数的值。我说的对吗?
然后我有以下代码:
var p1 = new Person ("John", 30);
p1.changeName ("Jane");
console.log(p1.name);
正如我在这里整理的那样,我们调用的方法将覆盖我们创建要引用的变量。但这并不会改变实际参数。那么,如果正确,我们为什么要使用它?更改实际的“名称”参数没关系吗?
整个代码来自教学应用!
答案 0 :(得分:0)
那么如果正确,为什么我们要使用它?更改实际的“名称”参数没关系吗?
否,在此示例中无需这样做。 changeName
更改由new Person
创建的对象的属性。
该示例代码确实有些奇怪,因为它在构造函数中创建了changeName
函数,但没有执行您在构造函数中创建该函数时通常执行的操作。我希望该代码就是这样,它将changeName
放在原型上:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.changeName = function(name) {
this.name = name;
};
(或等效的class
):
function Person(name, age) {
this.getName = function() {
return name;
};
this.changeName = function(newName) {
name = newName;
};
this.getAge = function() {
return age;
};
}
该代码确实更新了参数(这对调用Person
的代码完全没有影响)。它根本不会创建name
和age
属性;相反,它只是通过getName
和getAge
来访问它们的值。还有一个更改name
(changeName
)的功能;但没有更改age
的功能。人们编写这样的代码,使得age
不能从Person
构造函数中创建的外部代码更改。
答案 1 :(得分:-1)
我想您可能会误解您实际上更改了哪个参数,因此我将其重写为这样,这对您有所帮助。
ts
答案 2 :(得分:-2)
此关键字用于创建值并将其分配给类中的变量。它再次用于创建函数,即getter或setter。因此,在您的代码中, this.changeName 是一个函数,当传递值时,该函数将更改人员的姓名。 例如。
var a = 5; // a is an integer
var b = "Han"; //b is a string
var c = function(name){
//code here
} // then c is also a function;