在类的内部和外部声明原型函数?

时间:2018-06-28 21:03:01

标签: javascript ecmascript-6

 1
 1
 2
 2
 3
 3
 4
 4
 5
 5 

class A { foo() { console.log("foo"); } } class Mixin { insideFunction() {} } Mixin.prototype.outsideFunction = function() {}; Object.assign(A.prototype, Mixin.prototype); let test = new A(); test具有A.prototype,但没有outsideFunction

在类内部和外部声明函数之间有什么区别?我以为它们是同一件事,但在语法上只是不同。

此外,在Google Chrome浏览器中使用insideFunction时,console.log(Mixin.prototype)的文字颜色比其他所有文字(包括outsideFunction)都要深。应该代表什么?

1 个答案:

答案 0 :(得分:3)

  

在类内部和外部声明函数之间有什么区别?我以为它们是同一件事,但在语法上只是不同。

ES6类中声明的方法不可枚举。这意味着如果您愿意:

for(let key in Mixin.prototype) console.log(key)

您只会看到outsideFunction,因为这是一个普通的,可枚举的属性。与Object.assign一样,您不能使用它来复制无数方法。

要复制它们,您可以使用getOwnPropertyNames

function deepAssign(target, ...objs) {
  for(const obj of objs) {
    for(const key of Object.getOwnPropertyNames(obj)) {
      target[key] = obj[key];
    }
  }
}