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); // 无法调用,私有属性只能在类内容使用