avatar

封装

创建一个类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var Book = function(name, id) {
this.name = name;
this.id = id;
}

Book.prototype.showName = function() {
console.log(this.name);
}
或者
Book.prototype = {
showName: function() {
console.log(this.name);
}
}

var book = new Book('javascript红宝书', 1);
book.showName();

平常我们说的一些对象的公有属性,私有属性,公有方法,私有方法,特权方法,静态属性,静态方法这么多的名词到底是什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
var Book = function(name, id) {
// 私有属性 只能在函数内部自己访问, 外界访问不到
var num = 1;

// 私有方法 只能在函数内部自己访问, 外界访问不到
function checkId() {};

// 特权方法 在外界能访问到类的私有属性和私有方法的方法
this.getName = function() {};
this.getId = function() {};
this.setName = function() {};
this.setId = function() {};

// 公有属性 new关键字实例化的对象上绑定的属性
this.name = name;
this.id = id;

// 公有方法 new关键字实例化的对象上绑定的方法
this.show = function() {};

// 构造器
this.setName(name);
this.setId(id);
}

// 静态属性 new实例化出来的对象不能访问
Book.isChinese = true;

// 静态方法 new实例化出来的对象不能访问
Book.resetTime = function() {
console.log('resetTime');
}

Book.prototype = {
// 公有属性
isJsBook: true,
// 公有方法
showName: function() {}
}

var book = new Book('javascript红宝书', 1);
book.showName();

这样一个Book 的类就创建好了, 但是从开始定义Book = function…开始到最后感觉整个类的相关的定义是分开的, 不是一个整体, 所以一般就用闭包来将代码封装到一块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var Book = (function (){
// 静态私有属性
var bookNum = 0;
// 静态私有方法
function checkBook(name) {};
// 创建类
function _book(name, id) {
// 私有变量
var name, id;
// 私有方法
function checkId(id) {};
// 特权方法
this.getName = function() {};
this.getId = function() {};
this.setName = function() {};
this.setId = function() {};
// 公有属性
this.name = name;
this.id = id;
// 公有方法
this.show = function() {};
}
// 构造原型
_book.prototype = {
// 静态公有属性
isJSBook: false,
// 静态公有方法
display: function() {}
};
// 返回类
return _book;
})()
文章作者: Kwin
文章链接: http://huangkun.host/2020/03/25/20180917-封装/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kwin 's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论