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

2023-08-14  本文已影响0人  Cherry丶小丸子
静态成员:构造函数直接调用的属性、方法叫静态成员
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); // 无法调用,私有属性只能在类内容使用
上一篇下一篇

猜你喜欢

热点阅读