Skip to content

Commit 4330bfc

Browse files
committed
私有属性和方法 之 对象字面量和私有成员 翻译完毕
1 parent f0afe76 commit 4330bfc

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

chapter5.markdown

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,46 @@ JavaScript不像Java或者其它语言,它没有专门的提供私有、保护
266266

267267
当你需要传递所有的数据时,有另外一种方法,就是使用通用的对象复制函数创建specs对象的一个副本。下一章提供了两个这样的函数——一个叫extend(),它会浅复制一个给定的对象(只复制顶层的成员)。另一个叫extendDeep(),它会做深复制,遍历所有的属性和嵌套的属性。
268268

269+
### 对象字面量和私有成员
269270

271+
到目前为止,我们只看了使用构建函数创建私有成员的示例。如果使用对象字面量创建对象时会是什么情况呢?是否有可能含有私有成员?
270272

273+
如你前面所看到的那样,私有数据使用一个函数来包裹。所以在使用对象字面量时,你也可以使用一个立即执行的匿名函数创建的闭包。例如:
271274

275+
var myobj; // this will be the object
276+
(function () {
277+
// private members
278+
var name = "my, oh my";
279+
280+
// implement the public part
281+
// note -- no `var`
282+
myobj = {
283+
// privileged method
284+
getName: function () {
285+
return name;
286+
}
287+
};
288+
}());
289+
290+
myobj.getName(); // "my, oh my"
291+
292+
还有一个原理一样但看起来不一样的实现示例:
293+
294+
var myobj = (function () {
295+
// private members
296+
var name = "my, oh my";
297+
298+
// implement the public part
299+
return {
300+
getName: function () {
301+
return name;
302+
}
303+
};
304+
}());
305+
306+
myobj.getName(); // "my, oh my"
307+
308+
这个例子也是所谓的“模块模式”的基础,我们稍后将讲到它。
272309

273310

274311

0 commit comments

Comments
 (0)