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

Commitf146e09

Browse files
committed
私有属性和方法 一节翻译完毕
1 parent499751f commitf146e09

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

‎chapter5.markdown‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,5 +338,51 @@ JavaScript不像Java或者其它语言,它没有专门的提供私有、保护
338338
var toy = new Gadget();
339339
console.log(toy.getName()); // privileged "own" method console.log(toy.getBrowser()); // privileged prototype method
340340

341+
###将私有函数暴露为公有方法
341342

343+
“暴露模式”是指将已经有的私有函数暴露为公有方法。当对对象进行操作时,所有功能代码都对这些操作很敏感,而你想尽量保护这些代码的时候很有用。(译注:指对来自外部的修改很敏感。)但同时,你又希望能提供一些功能的访问权限,因为它们会被用到。如果你把这些方法公开,就会使得它们不再健壮,你的API的使用者可能修改它们。在ECMAScript5中,你可以选择冻结一个对象,但在之前的版本中不可用。下面进入暴露模式(原来是由Christian Heilmann创造的模式,叫“暴露模块模式”)。
344+
345+
我们来看一个例子,它建立在对象字面量的私有成员模式之上:
346+
347+
var myarray;
348+
349+
(function () {
350+
351+
var astr = "[object Array]",
352+
toString = Object.prototype.toString;
353+
354+
function isArray(a) {
355+
return toString.call(a) === astr;
356+
}
357+
358+
function indexOf(haystack, needle) {
359+
var i = 0,
360+
max = haystack.length;
361+
for (; i < max; i += 1) {
362+
if (haystack[i] === needle) {
363+
return i;
364+
}
365+
}
366+
return −1;
367+
}
368+
369+
myarray = {
370+
isArray: isArray,
371+
indexOf: indexOf,
372+
inArray: indexOf
373+
};
374+
375+
}());
376+
377+
这里有两个私有变量和两个私有函数——`isArray()``indexOf()`。在包裹函数的最后,使用那些允许被从外部访问的函数填充`myarray`对象。在这个例子中,同一个私有函数`indexOf()`同时被暴露为ECMAScript 5风格的`indexOf`和PHP风格的`inArry`。测试一下myarray对象:
378+
379+
myarray.isArray([1,2]); // true
380+
myarray.isArray({0: 1}); // false
381+
myarray.indexOf(["a", "b", "z"], "z"); // 2
382+
myarray.inArray(["a", "b", "z"], "z"); // 2
383+
384+
现在假如有一些意外的情况发生在暴露的`indexOf()`方法上,私有的`indexOf()`方法仍然是安全的,因此`inArray()`仍然可以正常工作:
385+
386+
myarray.indexOf = null;
387+
myarray.inArray(["a", "b", "z"], "z"); // 2
342388

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp