Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit267b34b

Browse files
committed
模块模式 之 介绍 翻译完毕
1 parentf146e09 commit267b34b

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

‎chapter5.markdown‎

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,3 +386,83 @@ JavaScript不像Java或者其它语言,它没有专门的提供私有、保护
386386
myarray.indexOf = null;
387387
myarray.inArray(["a", "b", "z"], "z"); // 2
388388

389+
##模块模式
390+
391+
模块模式使用得很广泛,因为它可以为代码提供特定的结构,帮助组织日益增长的代码。不像其它语言,JavaScript没有专门的“包”(package)的语法,但模块模式提供了用于创建独立解耦的代码片段的工具,这些代码可以被当成黑盒,当你正在写的软件需求发生变化时,这些代码可以被添加、替换、移除。
392+
393+
模块模式是我们目前讨论过的好几种模式的组合,即:
394+
395+
- 命名空间模式
396+
- 立即执行的函数模式
397+
- 私有和特权成员模式
398+
- 依赖声明模式
399+
400+
第一步是初始化一个命名空间。我们使用本章前面部分的`namespace()`函数,创建一个提供数组相关方法的套件模块:
401+
402+
MYAPP.namespace('MYAPP.utilities.array');
403+
404+
下一步是定义模块。使用一个立即执行的函数来提供私有作用域供私有成员使用。立即执行的函数返回一个对象,也就是带有公有接口的真正的模块,可以供其它代码使用:
405+
406+
MYAPP.utilities.array = (function () {
407+
return {
408+
// todo...
409+
};
410+
}());
411+
412+
下一步,给公有接口添加一些方法:
413+
414+
MYAPP.utilities.array = (function () {
415+
return {
416+
inArray: function (needle, haystack) {
417+
// ...
418+
},
419+
isArray: function (a) {
420+
// ...
421+
}
422+
};
423+
}());
424+
425+
如果需要的话,你可以在立即执行的函数提供的闭包中声明私有属性和私有方法。函数顶部也是声明依赖的地方。在变量声明的下方,你可以选择性地放置辅助初始化模块的一次性代码。函数最终返回的是一个包含模块公共API的对象:
426+
427+
MYAPP.namespace('MYAPP.utilities.array');
428+
MYAPP.utilities.array = (function () {
429+
430+
// dependencies
431+
var uobj = MYAPP.utilities.object,
432+
ulang = MYAPP.utilities.lang,
433+
434+
// private properties
435+
array_string = "[object Array]",
436+
ops = Object.prototype.toString;
437+
438+
// private methods
439+
// ...
440+
// end var
441+
442+
// optionally one-time init procedures
443+
// ...
444+
445+
// public API
446+
return {
447+
448+
inArray: function (needle, haystack) {
449+
for (var i = 0, max = haystack.length; i < max; i += 1) {
450+
if (haystack[i] === needle) {
451+
return true;
452+
}
453+
}
454+
},
455+
456+
isArray: function (a) {
457+
return ops.call(a) === array_string;
458+
}
459+
// ... more methods and properties
460+
};
461+
}());
462+
463+
模块模式被广泛使用,这是一种值得强烈推荐的模式,它可以帮助组织代码,尤其是代码量在不断增长的时候。
464+
465+
466+
467+
468+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp