通过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
答案 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
关键字。