类的封装与实例化
JavaScript 类的封装与实例化
JavaScript 是强大的面向对象的编程语言,不过不同于很多传统的编程语言,JavaScript 使用了基于原型链的 OOP 模型;同时,JavaScript 将函数也视作一等对象,也导致了很多开发者可能陷入迷惑。而在面向对象的学习中,我们会考虑命名空间、类的声明、构造函数、对象实例化、类继承等内容。
传统的类实现
命名空间
面向对象编程的一大特性就是类的封装性,能够避免来自全局命名空间的冲突;在传统的类实现中,我们常用命名空间的模式来进行类封装,Essential JavaScript Namespacing Patterns 一文中 AddyOsmani 就为我们详细介绍了多种 JavaScript 命名空间模式。最简单的嵌套命名空间范式就是使用 Object Literal 来将函数、变量打包到某个唯一的命名下:
MyApp.users = {
// properties
existingUsers: [...],
// methods
renderUsersHTML: function() {
...
}
};
构造函数
function User( name, email ) {
// properties
this.name = name;
this.email = email;
// methods
this.sayHey = function() {
console.log( “Hey, I’m “ + this.name );
};
}
// instantiating the object
const steve = new User( “Steve”, “steve@hotmail.com” );
// accessing methods and properties
steve.sayHey();