类型和对象的关系
- 类型:数据类型的简称,是一个概念,是一个称呼,是一对具有共同属性和相似行为的对象的模板!一个类型下可以创建多个对象!
- 对象:实际存在的一个事物,属于某个指定的类型
类型中的属性:
- 静态属性:属于类的属性,只能被类访问,不能被对象访问;
- 成员属性:简称属性,属于对象的属性,可以被创建的对象访问;每个对象的成员属性数据都是互相独立的
类型中的方法:本质上就是函数,函数出现在类中称为方法
- 静态方法:属于类的方法,只能被类访问,不能被对象访问
- 成员方法:简称方法或者对象的函数,属于对象的,只能被对象访问;不同对象各自的方法都是互相独立的
// 有一种当前类型固有的属性,不属于对象
// 1.原生js,通过挂载到prototype原型对象上实现
function Person() {}
Person.prototype.MAX_AGE = 120 // 人类型的最大年龄
// 2.ES6中,属于类型的属性和方法,通过静态属性和静态方法体现
class Article {
// 静态属性:属于类型的属性
static MAX_WORDS = 2000
// 静态方法:属于类型的方法
static SHOW() {
console.log("欢迎进入社交平台")
}
// 成员属性:属于对象的属性
constructor(title, content) {
this.title = title
this.content = content
}
// 成员方法:属于对象的方法
edit(title, content) {
this.title = title
this.content = content
}
}
// 创建一个文章对象
var article = new Article("TIOBE排行榜", "Python占据10月份排行榜第一名")
// 使用文章对象中的数据
// ① 成员属性,通过对象直接使用
console.log(article.title, article.content)
// 成员方法,通过对象直接调用
article.edit("TIOBE排行", "JavaScript占据的市场在上升")
console.log(article.title, article.content)
// ② 静态属性:不能被对象直接调用
// console.log(article.MAX_WORDS)
// article.SHOW()
// 静态属性,只能由类型调用
console.log(Article.MAX_WORDS)
Article.SHOW()
// 如果非要通过对象访问静态属性/方法,可以通过原型链访问:不推荐
// ES6新的面向对象的语法,是一种语法上的优化;并没有从底层实现上进行重构!
console.log(article.__proto__.constructor.MAX_WORDS)