js创建对象 设计模式
2017-09-19 18:01
211 查看
类的功能:
构造器
静态属性,静态方法
共有属性,共有方法
私有属性,私有方法
本文就说说如何用js实现对类的封装,实现上述功能,
2
3
4
5
6
7
8
如何你觉得Ta不像类的话,那么你可以这样做
2
3
4
5
6
7
8
9
有了上面的例子之后,我们在此基础之上就可以进行我们的完善了。
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
这里我们用闭包来实现,首先解释下闭包的概念。
闭包概念:一个函数有权访问另一个函数作用域中的变量,即在一个函数内部创建另一个函数
实现如下:
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
调用如下:
2
3
4
5
6
7
8
9
有些公共属性,方法,可以设置为静态的,这样可以在每次实例化的时候,不需要额外开辟内存资源,达到真正意义上的共享,
有些公共的属性方法,只想在内部程序处理时候达到共享,则设置为,静态私有属性方法,
有些公共的属性方法,想在实例对象中达到共享,则设置为prototype属性方法,
构造器
静态属性,静态方法
共有属性,共有方法
私有属性,私有方法
本文就说说如何用js实现对类的封装,实现上述功能,
1.一个简单的类
var Person = function(name, age){ this.name = name; this.age = age; this.sayName = function(){ console.log(this.name); }; }1
2
3
4
5
6
7
8
如何你觉得Ta不像类的话,那么你可以这样做
var Person = function(name, age){ //共有属性 this.name = name; this.age = age; //共有方法 this.sayName = function(){ console.log(this.name); }; }1
2
3
4
5
6
7
8
9
2.一个复杂的类
有了上面的例子之后,我们在此基础之上就可以进行我们的完善了。var Person = function(name, age){ //共有属性 this.name = name; //共有方法 this.sayName = function(){ console.log(this.name); }; //静态私有属性(只能用于内部调用) var home = "China"; //静态私有方法(只能用于内部调用) function sayHome(){ console.log(home); } //构造器 this.setAge = function(age){ console.log(age + 12); }; this.setAge(age); } //静态方法(只能被类来访问) Person.sayAge = function(){ console.log("your age is 12"); } //静态属性(只能被类来访问) Person.drink = "water"; //静态共有方法(类和实例都可以访问) Person.prototype.sayWord = function(){ console.log("ys is a boy"); }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
3.封装js类
这里我们用闭包来实现,首先解释下闭包的概念。 闭包概念:一个函数有权访问另一个函数作用域中的变量,即在一个函数内部创建另一个函数
实现如下:
var Person = (function(){ //静态私有属性方法 var home = "China"; function sayHome(name){ console.log(name + "'s home in " + home); } //构造函数 function _person(name, age){ var _this = this; //构造函数安全模式,避免创建时候丢掉new关键字 if(_this instanceof _person){ //共有属性, 方法 _this.name = name; _this.getHome = function(){ //内部访问私有属性,方法 sayHome(_this.name); }; _this.test = sayHome; //用于测试 //构造器 _this.setAge = function(age){ _this.age = age + 12; }(age); }else{ return new _person(name, age); } } //静态共有属性方法 _person.prototype = { constructor: _person, drink: "water", sayWord: function(){ console.log("ys is a boy"); } } return _person; })();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
调用如下:
var p1 = new Person("ys", 12); p1.getHome(); //ys's home in China console.log(p1.age); //24 var p2 = Person("ys", 12); p2.getHome(); //ys's home in China console.log(p2.age); //24 console.log(p2.test == p1.test); //true, 证明静态私有变量共享性1
2
3
4
5
6
7
8
9
有些公共属性,方法,可以设置为静态的,这样可以在每次实例化的时候,不需要额外开辟内存资源,达到真正意义上的共享,
有些公共的属性方法,只想在内部程序处理时候达到共享,则设置为,静态私有属性方法,
有些公共的属性方法,想在实例对象中达到共享,则设置为prototype属性方法,
相关文章推荐
- js创建对象之设计模式
- 设计模式知识连载(4)---封装_3:创建对象的安全模式
- js 创建对象模式分析
- 设计模式【1】:原型模式【创建对象】
- js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
- 原型设计模式prototype-构造js自己定义对象
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- 浅谈js对象的创建和对6种继承模式的理解和遐想
- 设计模式之对象的创建
- 原型设计模式prototype-构造js自定义对象
- 【JS】JavaScript中对象的创建与原型模式
- 建造者模式-Builder Pattern 复杂对象的组装与创建——建造者模式(二):游戏角色设计的建造者模式解决方案
- js创建对象的几种模式
- C++设计模式 之 “对象创建”模式:Factory Method、Abstract Factory、Prototype、Builder
- javascript(js)创建对象的模式与继承的几种方式
- Javascript 中创建自定义对象的方法(设计模式)
- 浅谈 JS 创建对象的 8 种模式
- 设计模式——创建型模式之合理使用单例模式(Singleton Pattern)创建性能优化的对象(三)
- Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)
- 用来创建对象的设计模式之抽象工厂模式