- 前言
- nodeJS Code Gen Party 10 - 為 ToDo List 增加第三方認證
- 書籍寫作規範
- 如何在 Mac OSX Lion 上設定 node.js 的開發環境
- 如何在 Ubuntu 11.04 上設定 node.js 的開發環境
- JavaScript 物件實字
- Javascript 物件導向設計
- 製作一個 Hubot 的Plurk Adapter
- Node.js 基礎
- CoffeeScript
- Express 介紹
- Node.js 安裝與設定
- Node.js 簡介
- 附錄 Node.js 與 JavaScript
- NPM 套件管理工具
- Node.js 好用工具介紹
- Socket.io 长链接
- 用 Express 和 MongoDB 寫一個 todo list
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
JavaScript 物件實字
在 JavaScript 最常見也最容易產生一個物件的方式就是用物件實字,但他沒有 private、protected,所以就產生了一種撰碼風格,以 _ 代表 protected,__ 代表 private,當沒有 protected 時 _ 代表 private。
這是一個很簡單的物件實字
var dog = { walk: function () { }, run: function () { } };
實作 private
在物件實字的地方如果有需要用 private 屬性、方法,那就要透過 closure、立即函式。
寫法可能有許多不同的變化,但下面這個是我習慣的作法,用這種方法有幾點好處
- 方法寫在 return 的地方也可以透過 _this 去操作物件實字
- 在定義時可以按照一般的物件實字寫法去寫,之後再來定義哪些是可公開的方法、屬性
有好處當然也有壞處
- 在物件實字內不能使用 this,必須用 _this,因為之後我們真正去操作的物件實字並不是 _this,而是後面回傳的物件實字。
- 要建立兩個物件實字,好像有點麻煩...
var dog = (function () { var _this = { _name: 'Dog'; getName: function () { return _this.name; }, setName: function (name) { _this.name = name; } }; return { getName: _this.getName, setName: _this.setName, reset: function () { _this.name = 'Dog'; } }; })();
自動化 private
這裡提供一個方法讓大家方便建立有 private 屬性、方法的物件實字,這裡用之前提過的 _、__ 開頭代表 private 這種程式碼撰寫習慣
function objLiteral(_this) { var i, obj = {}, regex = /^_{1,2}/, tmp; function _method(method) { return function () { return method.apply(_this, arguments); }; } for (i in _this) { if (_this.hasOwnProperty(i)) { tmp = _this[i]; if (!regex.test(i)) { obj[i] = (typeof tmp === 'function' ? _method(tmp) : tmp); } } } return obj; }
來建立一個物件實字試試看
var dog = objLiteral({ _name: 'Dog', getName: function () { return this._name; }, setName: function (name) { this._name = name; } });
dog 底下有 getName、setName,沒有 _name,而且 method 裡可以使用 this!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论