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
)都要深。应该代表什么?
答案 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];
}
}
}