javascript类中“this”关键字的上下文

时间:2017-03-17 23:46:01

标签: javascript class this

我对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!!!");
        }
    }

0 个答案:

没有答案