# Ninja chapter 8 控制物件存取 8.1 範例 使用 Ninja 建構器函式 設值與取值 skillLevel 無法直接取得私有變數 skillLevel  8.2 範例 在物件實值裡定義取值器和設值器: 在屬性前加上 get or set *取值器不要加參數 *看似是取得屬性,實際上是執行方法  可以直接存取到ninjaCollection.ninjas 但注意不能執行 ninjaCollection.firstNinja()  8.3 範例 constructor : 建構器函式 用 new 呼叫類別時會被執行 可以直接存取到 ninjaCollection.ninjas  8.4 範例 使用 Object.difeineProperty 定義取值器和設值器 差異在於某些情境需要用到私有物件屬性時 拿不到 _skillLevel  8.5 範例 對物件屬性進行設值器驗證,用途於變數型別異常  8.6 範例 當有想要取得的物件屬性是由物件屬性組合而成時,可以使用這個範例的做法 8.7 範例 使用 proxy 建構器函式 控制物件存取 var p = new Proxy(target, handler); target 是想要套用 proxy 的物件 handler 是寫需求的 proxy 物件,裡面放方法 方法中的 target 表示 被proxy 套用的物件 方法中的 key 表示 被套用物件的屬性  可以多做效能解析、自動設值 關鍵字有 get、set、has deleteProperty、ownKeys defineProperty、apply construct 可以查看這裡面 http://es6.ruanyifeng.com/#docs/proxy ```javascript= // 可以讓下斜線的屬性被隱藏起來 (in 運算子) var handler = { has (target, key) { if (key[0] === '_') { return false; } return key in target; } }; var target = { _prop: 'foo', prop: 'foo' }; var proxy = new Proxy(target, handler); '_prop' in proxy // false // 可以阻止Object.keys 找到全部屬性 let target = { a: 1, b: 2, c: 3 }; let handler = { ownKeys(target) { return ['a']; } }; let proxy = new Proxy(target, handler); Object.keys(proxy) // [ 'a' ] ``` 8.8 範例 vs 8.9 範例 8.8 只為一個物件屬性的取值設值做紀錄 8.9 中任何對物件屬性的取值設值都會被記錄 8.10 範例 測試效能範例程式實作  target 是目標函式 thisArg 是目標函式的 this ```javascript= fun.apply(thisArg, [argsArray]) // thisArg // 讓 fun 呼叫時可以視為 this 的值。 // 注意,這可能並不是最後會在方法裡看見的值: // 如果這是一個在非 non-strict mode 下運作的程式碼, // null 及 undefined 將會被全域物件取代,而原始類別將被封裝。 ``` https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Function/apply args 是傳入目標函式的參數  8.11 範例 自動設值範例程式實作 index = +index 用一元加法運算子將屬性變成數字的測試  8.12 範例 陣列反過來數程式實作 8.13 範例 對 8.12 寫的方法做效能測試
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up