es6 propertyIsEnumerable

时间:2017-01-26 14:37:57

标签: javascript ecmascript-6 ecmascript-5

通过es6类语法创建的公共方法不可枚举。用es5和's'编写的'getname'方法有什么区别? ES6?

function Cat(){
 this.name="cat"
}
Cat.prototype.getname = function() {return this.name}
var cat = new Cat()

class Dog { 
 constructor(){
   this.name="dog"
 } 
 getname() {
   return this.name
 } 
}
var dog = new Dog()

cat.__proto__.propertyIsEnumerable("getname") //true
dog.__proto__.propertyIsEnumerable("getname") //false

2 个答案:

答案 0 :(得分:4)

将属性直接添加到具有obj.property = foo的对象将始终创建可枚举属性。

ES2015类语法不能这样做。

要在ES5中(部分)复制ES2015功能,您必须使用getname

添加Object.defineProperty(Cat.prototype, 'getname', ...)方法

答案 1 :(得分:4)

正如您所说,ES6类方法不可枚举。另一个区别是它们不具有可构造性:

new cat.__proto__.getname; // works
new dog.__proto__.getname; // throws a TypeError

此外,类中的方法代码始终为strict mode代码,并且可以利用某些语言功能,例如super关键字。