【发布时间】:2019-08-19 16:12:24
【问题描述】:
为什么类实例的构造函数属性包含整个类的主体,而不仅仅是构造函数?
// given:
class C {
constructor() {
this.data = 'some data'
}
fn() {
console.log('in fn')
}
}
const c = new C()
c.__proto__.constructor
// returns
// class C {
// constructor() {
// this.data = 'some data'
// }
// fn() {
// console.log('in fn')
// }
// }
Object.getPrototypeOf(c).constructor
// returns
// class C {
// constructor() {
// this.data = 'some data'
// }
// fn() {
// console.log('in fn')
// }
// }
c.constructor
// returns
// class C {
// constructor() {
// this.name = 'some data'
// }
// fn() {
// console.log('in fn')
// }
// }
我认为它只会返回实际的构造函数。据我了解,在 ES2015 之前,在扩展“类”之后,构造函数将被重置为子类的函数体,例如:
function Parent() { console.log('function body parent') }
function Child() { console.log('function body child') }
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child; // reset
但是,我在这里有点困惑,因为试图在这里查看构造函数只会让我得到 [native code]
Object.getPrototypeOf(Child).constructor
ƒ Function() { [native code] }
【问题讨论】:
标签: javascript class ecmascript-6 constructor