看板 Ajax 關於我們 聯絡資訊
※ 引述《givemoney (香榴槤)》之銘言: : 在ES5的時候我是這樣宣告物件的 : function a(){ : this.OuO.apply(this, arguments); 原 PO 這一行是想寫 this.OuO = this.OuO.bind(this) 嗎? 但除了是因為要刻意綁定方法的 this 外,應該都不需要再定義一次實體自己的 OuO 還是原 PO 想在初始化物件實體的時候先呼叫 OuO 做某些處理呢? : } : a.prototype.OuO = function(){ : } 把 OuO 方法定義在 a.prototype 上 function a 建構出來的物件實體 b 一樣可以 b.OuO() 並且 a.prototype.OuO 是 enumerable 的 也可以被 for-in 迭代出來 : var b = new a() : for(var key in b){ : console.log(key); //OuO : } : 可以成功打印出OuO 這裡印出的是 a.prototype.OuO : 但使用了ES6的Class變成 : class a{ : constructor(){ } : OuO(){ : } ES6 Class 定義的 method 是 non-enumerable 的 所以不能被 for-in 迭代出來 等同於 non-enumerable 版的 a.prototype.OuO : } : 一樣new一個a : 但forin卻什麼都沒有 : 這問題已經煩惱我一天惹 請各位神人幫忙QQ 假如原 PO 是想刻意綁定方法的 this 而定義實體自己的 OuO 那其實也可以這樣寫: class A { constructor() { this.OuO = this.OuO.bind(this) } OuO() {} } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.90.184 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1521303930.A.162.html ※ 編輯: jackblack (220.133.90.184), 03/18/2018 00:29:59
wotupset: OuO 03/27 10:17