[问题] 怎么forin出class的function name?

楼主: givemoney (香榴莲)   2018-03-17 21:32:20
在ES5的时候我是这样宣告物件的
function a(){
this.OuO.apply(this, arguments);
}
a.prototype.OuO = function(){
}
var b = new a()
for(var key in b){
console.log(key); //OuO
}
可以成功打印出OuO
但使用了ES6的Class变成
class a{
constructor(){ }
OuO(){
}
}
一样new一个a
但forin却什么都没有
这问题已经烦恼我一天惹 请各位神人帮忙QQ
作者: s25g5d4 (function(){})()   2018-03-17 21:55:00
ES6 的 class method 是 non-enumerable 的,不能用 forin 或 Object.keys() 去取得 method namehttps://jsfiddle.net/5xw6gas3/ 硬干的话是这样
作者: jackblack   2018-03-17 23:16:00
想问原 PO 为什么要在建构函式 a 里再 this.OuO.apply把 OuO 方法定义在 prototype 上就不用再定义一次物件实体自己的 OuO 了。而且 ES6 Class 定义的方法等同于定义在 prototype 上:a.prototype.OuO所以原 PO 的 class a 会等同于只把 OuO 定义在原型上的 function a。而 for-in 只会迭代 enumerable 属性但 class method 是 non-enumerable 的如果原 PO 想和你第一个 function a 一样定义物件实体的 OuO 方法,也可以在 ES6 Class 的 constructor 里这样写:this.OuO = this.OuO.apply(this, ...args)https://codepen.io/anon/pen/RMGYXM?editors=0012只是这样和 function a 里再 this.OuO.apply 一样怪 XD我发现我有一些没说清楚的地方 Orz,已经回一篇来说了

Links booklink

Contact Us: admin [ a t ] ucptt.com