属于这个类的所有对象都可以访问到的属性叫做公有属性,都可以访问到的方法叫做公有方法。
不论是公有方法还是公有属性都是一个类型下所有实例对象都有的东西。
ES5:
function Student(sname,sage){
this.sname=sname; // 公有属性
this.sage=sage; // 公有属性
}
Student.prototype.intr=function(){ // 公有方法
console.log(`I'm ${this.sname}, I'm ${this.sage}`)
}
var lilei=new Student("Li Lei",21);
console.log(lilei.intr()) // I'm Li Lei, I'm 21
ES6:
class Student {
constructor (sname,sage) {
this.sname=sname; // 公有属性
this.sage=sage; // 公有属性
}
intr () { // 公有方法
console.log(`I'm ${this.sname}, I'm ${this.sage}`);
}
}
var lilei=new Student("Li Lei",21);
console.log(lilei.intr()) // I'm Li Lei, I'm 21
只能在类的内部访问的属性叫做私有属性,只能在类的内部访问的方法叫做私有方法。
ES5:
function Student(sname,sage){
var sname=sname; // 私有属性
var sage=sage; // 私有属性
function intr(){ // 私有方法
console.log(`I'm ${this.sname}, I'm ${this.sage}`)
}
console.log(sage); //21
}
var lilei=new Student("Li Lei",21);
ES6:
class Student {
constructor (sname,sage) {
let lname=sname; // 私有属性
let lage=sage; // 私有属性
function intr () { // 私有方法
console.log(`I'm ${lname}, I'm ${lage}`);
}
intr(); // I'm Li Lei, I'm 21
}
}
let lilei=new Student("Li Lei",21);
不需要实例化创建子对象,就可用类型名直接调用的方法叫做静态方法。
比如ES5中的isArray()
方法,它的用法是检测任意一个对象是不是数组。
这个方法的主语可能是任意的类型,所以这个方法就不应该放在某一种类型的原型对象中,也不应该直接放在全局,会被随意的更改。正确的做法是把它放在相关联的一个类型的内部,使用的时候先找到类型然后类型.isArray()
调用。
实际上静态方法,本质上,就是放在类型的构造函数中的方法。
class Array {
constructor (sname,sage) {
...
}
static isArray(obj){ //静态方法
...
}
}
必须用子对象.方法()方式调用的方法,都是实例方法。
因为.前的子对象,也称为该类型的一个实例(instance)。
var str="hello";
str.toUpperCase()
var arr=[1,2,3,4,5];
arr.sort()
注:必须用这个类型的子对象才能调用