美文网首页
JS 构造函数中的静态成员、实例成员

JS 构造函数中的静态成员、实例成员

作者: Cherry丶小丸子 | 来源:发表于2023-08-14 16:38 被阅读0次
    静态成员:构造函数直接调用的属性、方法叫静态成员
    function Person(){}
    Person.sex = "男";  // 静态属性 sex
    Person.sayName = function (){ // 静态方法 sayName
        console.log('Hellow World'); 
    }
    
    console.log(Person.sex); // 男
    Person.sayName() // Hellow World
    
    var person = new Person();
    console.log(person.sex); // undefined
    person.sayName(); // Uncaught TypeError: person.sayName is not a function
    
    由此可见:静态成员的属性和方法不能通过实例对象调用,只能通过类的本身调用
    
    实例成员:构造函数实例化的对象才能调用的属性、方法叫实例成员

    在构造函数中,通过 this.xxx 属性声明或实例化对象后通过 对象.xxx 追加的都属于实例成员,也叫实例属性与实例方法

    function Person(name){
        this.name = name; // 实例属性 name
        this.say = function(){} // 实例方法 say()
    }
    
    var person = new Person();
    person.age = 14; // 实例属性 age
    person.sayName(); // 实例方法 sayName()
    
    console.log(Person.name); // undefined
    Person.sayName() // Uncaught TypeError: Person.sayName is not a function
    
    由此可见:实例成员的属性和方法也不能通过类本身调用,只能通过实例化对象调用
    
    原型属性与原型方法
    原型属性与原型方法写在了构造函数的 prototype 上
    当使用构造函数实例化对象时,该属性和方法会进入新对象的 __proto__ 上
    
    function Person(){}
    Person.prototype.age = '18'; // 声明原型属性
    Person.prototype.say = function(){ // 声明原型方法
        console.log('Hellow World')
    };
    
    console.log(Person.age) // undefined
    Person.say(); // Uncaught TypeError: Person.say is not a function
    
    var person = new Person();
    console.log(person.age); // 可以使用实例对象调用原型属性,实际是 person.__proto__.name
    person.say(); //可以使用实例对象调用原型方法,实际是 person.__proto__.say()
    
    由此可见:类的原型的属性和方法也不能通过类本身调用,只能通过实例化对象调用
    
    私有属性与私有方法
    function Person(name){
        var sex = "男";
        console.log(sex); // 私有属性只能在类内容使用
    }
    console.log(Person.sex); // 无法调用,私有属性只能在类内容使用
    
    var person = new Person();
    alert(person.sex); // 无法调用,私有属性只能在类内容使用
    

    相关文章

      网友评论

          本文标题:JS 构造函数中的静态成员、实例成员

          本文链接:https://www.haomeiwen.com/subject/gprcmdtx.html