为什么类在javascript中第一次返回空原型对象?

时间:2017-05-25 17:19:41

标签: javascript ecmascript-6

我在下面有一个代码,正如你在第一次看到console.log类的原型时那样,它返回空,但是这个类中的new对象实际上可以响应那些方法,然后我在原型中添加函数并带来新对象成功了,怎么解释呢?

的代码库

class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  get area() {
    return this.calcArea()
  }

  calcArea() {
    return this.height * this.width;
  }
}

console.log(Polygon.prototype)

polygon = new Polygon(222,122)
console.log(polygon.area)
console.log(polygon.calcArea())

Polygon.prototype.test = function(){ return "test"}
console.log(Polygon.prototype)
console.log(polygon.test())

输出

Polygon {}
27084
27084
Polygon { test: [Function] }
test

1 个答案:

答案 0 :(得分:5)

  

怎么解释呢?

通过class语法创建的方法/属性不可枚举,您记录该值的环境似乎不会显示不可枚举的属性。 console.log未标准化,因此必须预期不同环境中的不同产出。

通过赋值创建属性始终会创建一个可枚举的属性。



class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  get area() {
    return this.calcArea()
  }

  calcArea() {
    return this.height * this.width;
  }
}
Polygon.prototype.test = function(){ return "test"}

// Note the different values for `enumerable`
console.log(Object.getOwnPropertyDescriptor(Polygon.prototype, 'calcArea'));
console.log(Object.getOwnPropertyDescriptor(Polygon.prototype, 'test'));