我对javascript中的类中的“this”关键字感到有点困惑,通常“this”关键字仅指javascript中的对象,而javascript中的类只是具有语法suger的函数,但似乎你可以使用一个类中的“this”关键字引用它自己的类,这从我的理解只是一个函数。您可以使用“this”关键字来引用内部方法。我检查了mdn的“this”关键字,但是我没有看到它与类的使用。有人可以对这个主题以及它是如何工作有所了解,我正在寻求更好的理解,因为这种使用似乎是随机的,与javascript中应该如何使用“this”不一致。 “this”关键字不再仅仅引用对象吗?为了清楚起见我不是在问“这个”一般是如何工作的,我特别询问它如何与类一起工作,以及“this”如何与类一起工作,因为类是一个函数。
我在Dog类上有静态类方法,名为breed,这使用“this”关键字来引用类,它的工作正常
class Dog{
static breed(dog1,dog2,dogName){
if(this.isSameBreed(dog1,dog2) && this.isDifferentGender(dog1,dog2)){ //notice the "this" refering to the class
//itself, which is really just a function
let newDogName=dogName;
function randomGender(){
let randomNum=Math.floor(Math.random() * 2) +1;
if(randomNum===1){
return "male"
}
else {
return " female"
}
}
let newDog= new Dog(newDogName,dog1.breed,1,randomGender())
return newDog;
}
else if(dog1.breed != dog2.breed && dog1.breed === dog2.breed){
console.log(dogs1.name + " is not the same breed, its a dog1.breed and " + dog2.name + " is a dog2.breed");
}
else if(dog1.gender === dog2.gender && dog1.breed===dog2.breed){
console.log("Both dogs are a dog1.gender");
}
else{
console.log(dog1.name + " and " + dog2.name + " are different breeds and same gender");
}
}
static isSameBreed(dog1,dog2){
return dog1.breed===dog2.breed;
}
static isDifferentGender(dog1,dog2){
return dog1.gender != dog2.gender;
}
constructor(name,breed,age,gender){
this.name=name;
this.breed=breed;
this.age=age;
this.gender=gender;
}
bark(){
console.log(this.name + ": bark bark bark!!!");
}
growl(){
console.log(this.name + ": ggrrroooowwwwl!!!");
}
}