File tree Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -266,9 +266,46 @@ JavaScript不像Java或者其它语言,它没有专门的提供私有、保护
266
266
267
267
当你需要传递所有的数据时,有另外一种方法,就是使用通用的对象复制函数创建specs对象的一个副本。下一章提供了两个这样的函数——一个叫extend(),它会浅复制一个给定的对象(只复制顶层的成员)。另一个叫extendDeep(),它会做深复制,遍历所有的属性和嵌套的属性。
268
268
269
+ ### 对象字面量和私有成员
269
270
271
+ 到目前为止,我们只看了使用构建函数创建私有成员的示例。如果使用对象字面量创建对象时会是什么情况呢?是否有可能含有私有成员?
270
272
273
+ 如你前面所看到的那样,私有数据使用一个函数来包裹。所以在使用对象字面量时,你也可以使用一个立即执行的匿名函数创建的闭包。例如:
271
274
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
+ 这个例子也是所谓的“模块模式”的基础,我们稍后将讲到它。
272
309
273
310
274
311
You can’t perform that action at this time.
0 commit comments